社区讨论
TLE#6求助
CF86DPowerful array参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mds9uz4y
- 此快照首次捕获于
- 2025/08/01 11:36 7 个月前
- 此快照最后确认于
- 2025/11/04 03:23 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int in(){
int k=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
void out(int x){
if(x<0)putchar('-'),x=-x;
if(x<10)putchar(x+'0');
else out(x/10),putchar(x%10+'0');
}
int n,q,b[200005],k,l=1,r,ans,vis[1000006],cnt[200005];
struct Q{
int l,r,k,id;
}a[200005];
bool cmp(Q x,Q y){
if(x.k!=y.k) return x.k<y.k;
if(x.k%2==0) return x.r>y.r;
return x.r<y.r;
}
int main(){
n=in(),q=in();
k=n/sqrt(q*2/3)+1;
for(int i=1;i<=n;i++) b[i]=in();
for(int i=1;i<=q;i++) a[i].l=in(),a[i].r=in(),a[i].k=i/k,a[i].id=i;
sort(a+1,a+1+q,cmp);
for(int i=1;i<=q;i++){
while(l<a[i].l) ans+=(1-2*vis[b[l]])*b[l],vis[b[l]]--,l++;
while(r<a[i].r) r++,ans+=(1+2*vis[b[r]])*b[r],vis[b[r]]++;
while(l>a[i].l) l--,ans+=(1+2*vis[b[l]])*b[l],vis[b[l]]++;
while(r>a[i].r) ans+=(1-2*vis[b[r]])*b[r],vis[b[r]]--,r--;
cnt[a[i].id]=ans;
}
for(int i=1;i<=q;i++) out(cnt[i]),printf("\n");
return 0;
}
/*
a*a->(a+1)*(a+1)=a*a+1+2*a
a*a->(a-1)*(a-1)=a*a+1-2*a
*/
萌新想练习莫队,不知道为什么T
回复
共 3 条回复,欢迎继续交流。
正在加载回复...