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],root[maxn],cnt=0;
void build(long long last,long long &now,long long left,long long right,long long pos)
{
    now=++tot;sum[now]=sum[last]+1;
    if (left==right) return;
    long long mid=(left+right)>>1;
    ls[now]=ls[last];rs[now]=rs[last];
    if (pos<=mid) build(ls[last],ls[now],left,mid,pos);
    else build(rs[last],rs[now],mid+1,right,pos);
    sum[now]=sum[ls[now]]+sum[rs[now]];
}
long long ask(long long last,long long now,long long left,long long right,long long l,long long r)
{
    if ((left==l) && (right==r)) return sum[now]-sum[last];
    long long mid=(left+right)>>1;
    if (r<=mid) return ask(ls[last],ls[now],left,mid,l,r);
    else if (l>=mid+1) return ask(rs[last],rs[now],mid+1,right,l,r);
    else return ask(ls[last],ls[now],left,mid,l,mid)+ask(rs[last],rs[now],mid+1,right,mid+1,r);
}
int main()
{
    scanf("%lld%lld%lld",&n,&l,&r);
    for (long long i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        a[i]+=a[i-1];b[i]=a[i];hash[++cnt]=a[i];
    }
    sort(hash+1,hash+cnt+1);cnt=unique(hash+1,hash+cnt+1)-hash-1;
    for (long long i=1;i<=n;i++) a[i]=lower_bound(hash+1,hash+cnt+1,a[i])-hash;
    for (long long i=1;i<=n;i++) build(root[i-1],root[i],1,n,a[i]);
    for (long long i=1;i<=n;i++)
    {
        long long lb=b[i-1]+l,rb=b[i-1]+r;
        lb=lower_bound(hash+1,hash+cnt+1,lb)-hash;
        rb=lower_bound(hash+1,hash+cnt+1,rb)-hash;
        if (hash[rb]!=b[i-1]+r) rb--;
        if (lb>rb) continue;
        ans+=ask(root[i-1],root[n],1,n,lb,rb);
    }
    printf("%lld\n",ans);
    return 0;
}
时间: 2024-11-13 11:38:49

BZOJ 4627 回转寿司的相关文章

bzoj 4627: [BeiJing2016]回转寿司

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

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觉得金枪鱼没有

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 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当年给别人写的情书一样长-- 最大权闭合子图 最大权闭合子图问题:一个有向图中,每个点带有一个权值(有正有负),有向边\(u \to v\)表示选\(u\)必须选\(v\),选出一些点使权值和最大,问权值和最大是多少. 最大权闭合子图的解法:网络流建图,对于每个点\(u\),设权值为\(w_u\),如

BZOJ:4873: [Shoi2017]寿司餐厅

4873: [Shoi2017]寿司餐厅 首先很开心在膜你赛的时候做了出来. 看到数据范围,看到不能dp,看到贡献去重后计算,咦,流? 那就容易了,转最大权闭合子图,每个区间建一个点,取了就一定要取他的子区间(依赖关系),代价上也很容易用依赖关系搞. 提交完A了就没理,后来同学说我#1了??? #include<cstdio> #include<algorithm> #define MN 40001 using namespace std; int read_p,read_ca,r

BZOJ 4197: [Noi2015]寿司晚宴( dp )

N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个人即可. 时间复杂度O(N*2^16) ----------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm&

【dp】【NOI 2015】【bzoj 4197】寿司晚宴

4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 58 Solved: 46 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n?1 种不同的寿司,编号 1,2,3,-,n?1,其中第 i 种寿司的美味度为 i+1 (即寿司的美味度为从 2 到 n). 现在小 G 和小 W

[BZOJ]4197: [Noi2015]寿司晚宴

Time Limit: 10 Sec  Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n?1 种不同的寿司,编号 1,2,3,-,n?1,其中第 i 种寿司的美味度为 i+1 (即寿司的美味度为从 2 到 n). 现在小 G 和小 W 希望每人选一些寿司种类来品尝,他们规定一种品尝方案为不和谐的当且仅当:小 G 品尝

bzoj 4197: [Noi2015]寿司晚宴【状压dp】

一个数内可能多个的质因数只有小于根号n的,500内这样的数只有8个,所以考虑状压 把2~n的数处理出小于根号500的质因数集压成s,以及大质数p(没有就是1),然后按p排序 根据题目要求,拥有一个质因数的只能给一个人,所以排序后能给一个人的大质数就是一个区间 然后设f[s1][s2]为一人选s1,另一人选s2的方案数,注意这里的s只压了小于根号500的八个质数 设g[0/1][s1][s2]为一人选s1,另一人选s2的,当前枚举的大质数给小G/小W的方案数 正常转移即可 然后注意把g转到f上时应