社区讨论
ABC E求调,对0的处理有问题
学术版参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi1a2fb0
- 此快照首次捕获于
- 2025/11/16 13:31 4 个月前
- 此快照最后确认于
- 2025/11/17 09:10 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
#define ll long long
ll a[N],b[N],c[N];
int now0 = 0;
int lowbit(int x){
return x&-x;
}
void add(ll p[],ll x,ll v){
for(;x<=N;x+=lowbit(x)){
p[x]+=v;
}
}
ll query(ll p[],ll x){
ll res = 0;
for(;x;x-=lowbit(x)){
res+=p[x];
}
return res;
}
int main(){
int n,q;
cin>>n>>q;
for(int i = 1;i<=n;i++)cin>>a[i];
for(int i = 1;i<=n;i++){
add(b,a[i],a[i]);
add(c,a[i],1);
}
for(int i = 1;i<=q;i++){
int x;
cin>>x;
if(x==1){
int u,v;
cin>>u>>v;
if(a[u]!=0){
add(b,a[u],-a[u]);
cout<<query(c,a[u])<<" ";
add(c,a[u],-1);
cout<<query(c,a[u])<<" ";
}
else now0--;
a[u] = v;
if(v!=0){
add(b,a[u],a[u]);
add(c,a[u],1);
}
else now0++;
cout<<query(c,N)<<endl;
}
if(x==2){
int l,r;
cin>>l>>r;
if(r<=l)cout<<1ll*n*l<<"\n";
else{
ll r1 = query(b,l);
//cout<<1;
ll r2 = query(b,r);
//cout<<2;
ll r3 = query(b,N-10);
//cout<<3;
ll p1 = query(c,l);
//cout<<4;
ll p2 = query(c,r);
//cout<<5;
ll p3 = query(c,N-10);
//cout<<6;
ll ans = 0;
for(int i = 1;i<=n;i++)cout<<a[i]<<" ";
cout<<endl;
cout<<p1<<" "<<p2<<" "<<p3<<endl;
ans+=1ll*(p3-p2)*r;
//cout<<ans<<" ";
ans+=1ll*p1*l;
//cout<<ans<<" ";
ans+=r2-r1;
ans+=1ll*l*now0;
//cout<<ans<<" ";
cout<<ans<<"\n";
}
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...