P5459 [BJOI2016]回转寿司

传送门

暴力怎么搞,维护前缀和 $s[i]$ ,对于每一个 $s[i]$,枚举所有 $j\in[0,i-1]$,看看 $s[i]-s[j]$ 是否属于 $[L,R]$

如果属于就加入答案

$s[i]-s[j]\in[L,R]$ 等价于 $s[i]-s[j] \geqslant L , s[i]-s[j] \leqslant R$

即 $s[i]-L \geqslant s[j] , s[i]-R \leqslant s[j]$

发现对于每一个 $i$ 其实就是问区间 $[0,i-1]$ 中权值在 $[s[i]-L,s[i]-R]$ 之间的 $s[j]$ 的数量

直接权值树状数组,发现值域太大,所以要离散化

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f=-1; ch=getchar(); }
    while(ch>=‘0‘&&ch<=‘9‘) { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=1e6+7;
int n,L,R;
int t[N];
ll ans,a[N],s[N];//注意long long
inline void add(int x) { while(x<=n+1) t[x]++,x+=x&-x; }
inline int ask(int x) { int res=0; while(x) res+=t[x],x-=x&-x; return res; }
int main()
{
    n=read(),L=read(),R=read();
    for(int i=1;i<=n;i++) a[i]=s[i]=s[i-1]+read();
    sort(a+1,a+n+2);
    for(int i=0;i<=n;i++)//注意i=0
    {
        int tr=lower_bound(a+1,a+n+2,s[i]-L+1)-a-1;//这个等价于upper_bound(a+1,a+n+2,s[i]-L)-a-1;
        int tl=lower_bound(a+1,a+n+2,s[i]-R)-a;
        ans+=ask(tr)-ask(tl-1);
        add(lower_bound(a+1,a+n+2,s[i])-a);
    }
    printf("%lld\n",ans);
    return 0;
}

//si-sj>=L  si-L>=sj sj<=si-L
//si-sj<=R  si-R<=sj sj>=si-R

原文地址:https://www.cnblogs.com/LLTYYC/p/11175354.html

时间: 2024-12-14 07:30:54

P5459 [BJOI2016]回转寿司的相关文章

Bzoj4627 [BeiJing2016]回转寿司

Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 329  Solved: 149[Submit][Status][Discuss] Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文 鱼寿司的满意度为10:小Z觉得金枪鱼没有什么味道,他对一盘金枪鱼寿司的满意度只有5:小Z

bzoj 4627: [BeiJing2016]回转寿司

4627: [BeiJing2016]回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文 鱼寿司的满意度为10:小Z觉得金枪鱼没有什么味道,他对一盘金枪鱼寿司的满意度只有5:小Z最近看了电影“美 人鱼”,被里面的八爪鱼恶心到了,所以他对一盘八爪鱼刺身的满意度是-100.特别地,小Z是个著名的吃货,他 吃回转寿

BZOJ 4627 回转寿司

学用vim写的第一道题. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 100500 using namespace std; long long n,l,r,a[maxn],b[maxn],hash[maxn],tot=0,ans=0; long long ls[maxn*40],rs[maxn*40],sum[maxn*40],

F - 回转寿司 (权值线段树)

题目链接:https://cn.vjudge.net/contest/281960#problem/F 题目大意:中文题目 具体思路:权值线段树,我们每次寻找的是满足 (i<j)   L<=s[i]-s[j]<=R.转换一下,就是 s[j]-R<=s[i]<=s[j]-L.这样的话,我们每一次寻找满足情况的合数就可以了. ps:第一次做权值线段树,感觉这东西和线段树差不多,只不过每一个区间表示成了具体的值有多少个. AC代码: 1 #include<bits/stdc+

bzoj 4627 值域线段树

4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 523  Solved: 227[Submit][Status][Discuss] Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文 鱼寿司的满意度为10:小Z觉得金枪鱼没有

beijing2016

4625: [BeiJing2016]水晶 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 201  Solved: 70[Submit][Status][Discuss] Description 不用惊慌,今天的题都不是小强出的.--融入了无数心血的作品,现在却不得不亲手毁掉,难以体会他的心情啊 .--那也是没有办法的事情,能量共振不消除的话--望着已经被装上炸的水晶,02放下了望远镜,看向了手 中的共振分析报告.还是会有一些水晶,幸存下来的--

初涉值域线段树

其实就是线段树啦 什么是值域线段树 我们(初学者)都知道线段树是拿来维护数列区间的信息的.但是如果我们想要查询的重点在于数值而不是区间信息呢?这时候就要对于值域区间维护线段树了. 例题 bzoj4627: [BeiJing2016]回转寿司 题目大意 给定$n$个数和$L,R$,问其中区间和满足$L<=sum[r]-sum[l-1]<=R$的区间有多少 N≤100000,|Ai|≤100000,0≤L, R≤10^9 题目分析 值域线段树中每个节点代表一个值的区间,其实和基础的线段树差不多.

皇家利华注册156+8793+1777学着做个情调女人

学着做个情调女人情调女人与年龄无关,是一种平和而热烈的心境,是一种面对现实的修养,是一种生活方式,是一种成熟的幸福女人的生存方式和为人处世的态度,情调女人的生成,是先天的,也是后天的,情调女人是物质的,更多是精神的. 学着做个情调女人 情调女人象一本书,也许没有过分美丽精致的封页,也没有用来制造卖点的扉页和序言,但读后可以收获,即使不收获也会感悟,即使不感悟也会快乐,即使不快乐也会轻松.- 情调女人和时尚女人不一样,但感觉是相通的.时尚女人也许不是情调女人,但情调女人至少有一点时尚.她懂得自己的

[NOI2015]寿司晚宴

题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n?1种不同的寿司,编号1,2,3,?,n-1,其中第种寿司的美味度为i+1(即寿司的美味度为从2到n). 现在小G和小W希望每人选一些寿司种类来品尝,他们规定一种品尝方案为不和谐的当且仅当:小G品尝的寿司种类中存在一种美味度为x的寿司,小W品尝的寿司中存在一种美味度为y的寿司,而x与y不互质. 现在小G和小W希望统计一共有多少种和谐的品尝寿司