• bzoj4627: [BeiJing2016]回转寿司


    好题!

    这题教会我:写cdq可以不拘一格,只要保证本质是释放左半部分影响于右半部分就可以了。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    int n;LL L,R;
    LL a[110000],s[110000],tt[110000],ans;
    void cdq(int l,int r)
    {
        if(l==r)return ;
        int mid=(l+r)/2;
        cdq(l,mid);cdq(mid+1,r);
        
        LL head=l,tail=l-1;
        for(LL i=mid+1;i<=r;i++)
        {
            while(tail+1<=mid&&L<=s[i]-s[tail+1])tail++;
            while(head<=mid&&s[i]-s[head]>R)head++;
            ans+=max(tail-head+1,0LL);
        }
        sort(s+l,s+r+1);
    }
    int main()
    {
        scanf("%d%lld%lld",&n,&L,&R);
        s[1]=0;
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]), s[i+1]=s[i]+a[i];
        n++;ans=0;
        cdq(1,n);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    eclipse建立工作集管理项目
    echarts-x
    GeoJSON
    mysql 5.7 root password 过期
    kubernetes centos7
    JestClient
    树莓派镜像制作
    docker run elasticsearch
    vm.max_map_count
    远程访问jupyter notebook
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8622138.html
Copyright © 2020-2023  润新知