• NBUT1457


    不知道哪里的oj。。做了交不上去。。

    也是莫队的模板题

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define MAXN 100005
    #define ll long long 
    struct Query{
        int L,R,id;
    }q[MAXN];
    ll ans[MAXN],cnt[MAXN];//这个颜色在当前区间出现的次数
    int s,note[MAXN];
    bool cmp(Query a,Query b){
        if(a.L/s == b.L/s) return a.R<b.R;
        return a.L/s < b.L/s;
    }
    ll cube(ll a){
        return a*a*a;
    }
    int main(){
        int n,m;
        scanf("%d",&n);
        s=(int)sqrt(n);
        for(int i=1;i<=n;i++) scanf("%d",&note[i]);
        scanf("%d",&m);
        for(int i=0;i<m;i++) {
            int a,b;
            scanf("%d%d",&a,&b);
            q[i]=(Query){a,b,i};
        }
        sort(q,q+m,cmp);
        int L=1,R=0;
        ll res=0;
        for(int i=0;i<m;i++){
            while(R<q[i].R){
                R++;
                res+=cube((cnt[note[R]]+1))-cube(cnt[note[R]]);
                cnt[note[R]]++;
            }
            while(R>q[i].R){
                res-=cube(cnt[note[R]])-cube(cnt[note[R]]-1);
                cnt[note[R]]--;
                R--;
            }
            while(L<q[i].L){
                res-=cube(cnt[note[L]])-cube(cnt[note[L]]-1);
                cnt[note[L]]--;
                L++;
            }
            while(L>q[i].L){
                L--;
                res+=cube(cnt[note[L]]+1)-cube(cnt[note[L]]);
                cnt[note[L]]++;
            }
            ans[q[i].id]=res;
        }
        for(int i=0;i<m;i++){
            printf("%d
    ", ans[i]);
        }
        return 0;
    }
  • 相关阅读:
    高程5.4 RegExp类型
    高程5.3 Date类型
    高程5.2.9归并方法
    20151119js上课总结
    从0~100之间随机取出不重复的10个数
    高程5.2.8迭代方法
    HTML常用标签
    20151118小问题
    20151117小问题
    《QT Creator快速入门》
  • 原文地址:https://www.cnblogs.com/zsben991126/p/9853504.html
Copyright © 2020-2023  润新知