0分求助

P2709 小B的询问

oioiuououououououououou
by zask_lover_is_lqq @ 2023-09-13 20:14:37


我都过了@[Locix_Elaina_Celome](/user/544571) ```cpp #include<bits/stdc++.h> using namespace std; int rd(int x=0,char c=getchar()){int f=1;while(!isdigit(c))f=(c^'-'?1:-1),c=getchar();while(isdigit(c))x=x*10+(c^48),c=getchar();return x*f;} using ll=long long; const int N=4e5+5; int n,m,k,l=1,r,a[N],bl[N],blk; ll sum,ans[N],cnt[N]; struct ask{ int l,r,id; bool friend operator<(const ask&a,const ask&b){ if(bl[a.l]!=bl[b.l])return a.l<b.l; return a.r<b.r; } }q[N]; void add(int x){sum+=cnt[a[x]]++*2+1;} void del(int x){sum-=cnt[a[x]]--*2-1;} int main(){ n=rd(),m=rd(),k=rd();blk=n/sqrt(m); for(int i=1;i<=n;i++)a[i]=rd(),bl[i]=(i-1)/blk+1; for(int i=1;i<=m;i++)q[i]={rd(),rd(),i}; sort(q+1,q+1+m); for(int i=1;i<=m;i++){ while(l<q[i].l)del(l++); while(r>q[i].r)del(r--); while(l>q[i].l)add(--l); while(r<q[i].r)add(++r); ans[q[i].id]=sum; }for(int i=1;i<=m;i++)printf("%lld\n",ans[i]); return 0; } ```
by zask_lover_is_lqq @ 2023-09-13 20:27:22


`now+=1-(cnt[a[l]]<<1)` 是不是写反了
by zask_lover_is_lqq @ 2023-09-13 20:28:36


把13行的`^(belong[l]&1)`删掉就过了 ~~世界真奇妙~~
by Locix_Elaina_Celome @ 2023-09-14 17:13:54


|