最后一个WA,求大佬看看QWQ
查看原帖
最后一个WA,求大佬看看QWQ
544626
Benjieming123楼主2022/8/1 16:03
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5 ;
int lowbit(int x){
	return x & (-x) ;
}
long long a[maxn], c[maxn] ;
int q, n, m ;
void update(int id, long long x){
	for(int i = id; i <= n; i += lowbit(i)){
		c[i] += x ;
		a[i] += x * id ;
	}
}
long long getsum(int x){
	long long ans = 0 ;
	for(int i = x; i; i -= lowbit(i)){
		ans += (x + 1) * c[i] - a[i];
	}
	return ans ;
}
int main(){
	scanf("%d %d", &n, &m ) ;
	int last = 0 ;
	for(int i = 1; i <= n; i++){
		scanf("%d", &q ) ;
		update(i , q - last) ;
		last = q ;
	}
	long long frist = 0 ;
	for(int i = 1; i <= m; i++){
		int o ;
		scanf("%d", &o) ;
		switch(o){
			case 1:{
				int x, y, k ;
				scanf("%d %d %d", &x, &y, &k ) ;
				update(x, k) ;
				update(y + 1, -k) ;
				break;
			}
			case 2:{
				int k ;
				scanf("%d", &k ) ;
				frist += k ;
				break;
			}
			case 3:{
				int k ;
				scanf("%d", &k ) ;
				frist -= k ;
				break;
			}
			case 4:{
				int x, y ;
				scanf("%d %d", &x, &y ) ;
				if(x == 1) printf("%lld\n", getsum(y) - getsum(x - 1) + frist) ;
				else printf("%lld\n", getsum(y) - getsum(x - 1)) ;
				break;
			}
			case 5:{
				printf("%lld\n", getsum(1) + frist ) ;
				break;
			}
		}
	}
	return 0;
}
2022/8/1 16:03
加载中...