蒟蒻树状数组超时求助
  • 板块P2357 守墓人
  • 楼主眼镜犬
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/13 21:33
  • 上次更新2023/11/6 20:22:55
查看原帖
蒟蒻树状数组超时求助
218545
眼镜犬楼主2020/8/13 21:33
#include<bits/stdc++.h>
#define lowbit(x) x&(-x)
#define M(a,b) memset(a,b,sizeof(a))
#define maxn 200001
#define inf 0x7fffffff
using namespace std; 
inline long long read(){
    char c=getchar();long long num=0;bool b=0;
    for(;c<'0'||c>'9';b=(c=='-'?1:0),c=getchar());
    for(;c>='0'&&c<='9';num=(num<<3)+(num<<1)+(c^'0'),c=getchar());
    return b?-num:num;
}
long long n,m,x;
long long c[maxn]; 
inline void add(long long i,long long x){
	for(long long j=i;j<=maxn;j+=lowbit(j)) c[j]+=x;
	return; 
}
long long sum(long long x){
	long long ans=0;
	while(x){
		ans+=c[x];
		x-=lowbit(x);
	}
	return ans; 
}
int main(){
	n=read();
	m=read();
	for(long long i=1;i<=n;i++){
		x=read();
		add(i,x);
	}
	for(long long i=1;i<=m;i++){
		x=read();
		switch(x){
			case 1:
				long long s,e,k;
				s=read();
				e=read();
				k=read();
				for(long long j=s;j<=e;j++) add(j,k);
				break;
			case 2:
				long long kk;
				kk=read();
				add(1,kk);
				break;
			case 3:
				long long kkk;
				kkk=read();
				add(1,-kkk);
				break;
			case 4:
				long long ss,ee;
				ss=read();
				ee=read();
				printf("%lld\n",sum(ee)-sum(ss-1));
				break;
			case 5:
				printf("%lld\n",sum(1));
				break;
		}
	}
	return 0;
}
2020/8/13 21:33
加载中...