求调
查看原帖
求调
537998
lpx2024楼主2023/9/24 11:29

样例过了显示"Too short on line 1"

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxN=500010;
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.r<a2.r;
    else return a1.l<a2.l;
}
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 j=1;j<=m;j++){
                    printf("lld",ans[j]);
                    cout<<"    ";
                    printf("\n");
                }
                return 0;
            }
            p++;
        }
    }
}
2023/9/24 11:29
加载中...