样例过了交上去全RE求助
查看原帖
样例过了交上去全RE求助
537998
lpx2024楼主2023/7/30 09:46
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxN=50010;
struct ask{
    int l,r,id;
} s[maxN];
int q,num[maxN],ans[maxN],c[maxN];
bool cmp(ask a1,ask a2){
    if(a1.l/q!=a2.l/q) return a1.l/q<a2.l/q;
    else return a1.r<=a2.r;
}
signed main(){
    int n,m,k;
    cin>>n>>m>>k;
    q=sqrt(n);
    for(int i=1;i<=n;i++) cin>>num[i];
    for(int i=1;i<=m;i++){
        cin>>s[i].l>>s[i].r;
        s[i].id=i;
    }
    sort(s+1,s+m+1,cmp);
    int p=1,t=0,L=1,R=0;
    for(int i=0;i<=q;i++){
        while(s[p].l/q==i){
            while(L>s[p].l){
                L--;
                t+=2*c[num[L]]+1;
				c[num[L]]++;
            }
            while(L<s[p].l){
                c[num[L]]--;
                t-=2*c[num[L]]+1;
                L++;
            }
            while(R>s[p].r){
                c[num[R]]--;
                t-=2*c[num[R]]+1;
                R--;
            }
            while(R<s[p].r){
                R++;
                t+=2*c[num[R]]+1;
				c[num[R]]++;
            }
            ans[s[p].id]=t;
            if(p==m){
                for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
                return 0;
            }
            p++;
        }
    }
}
2023/7/30 09:46
加载中...