P2357 0pts 求助
  • 板块灌水区
  • 楼主OrientDragon
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/27 16:43
  • 上次更新2024/10/27 18:41:41
查看原帖
P2357 0pts 求助
1173109
OrientDragon楼主2024/10/27 16:43
#include<bits/stdc++.h>
#define int long long
const int N=200005;
int n,f,l,r,x,tree[2][N];
int read(){
	int x=0,f=1;char ch;
	while((ch=getchar())<48||ch>57)if(ch==45)f=0;
	while(ch>=48&&ch<=57)x=(x<<3ll)+(x<<1ll)+(ch^48),ch=getchar();
	return f?x:-x;
}
void write(int x){
	if(x<0)putchar(45),write(-x);
	else{if(x>9)write(x/10);putchar(x%10^48);}
}
void writeln(int x){write(x),puts("");}
void upd(int x,int val){
	for(int i=x;i<=n;i+=i&-i)tree[0][i]+=x*val;
	for(;x<=n;x+=x&-x)tree[1][x]+=val;
}
int ask(int x,int ret=0){for(int i=x;i;i-=i&-i)ret+=(x+1)*tree[1][i]-tree[0][i];return ret;}
int query(int r,int l){return ask(r)-ask(l-1);}
signed main(){
	n=read(),f=read();
	for(int i=1;i<=n;++i)upd(i,x=read()-x);
	while(f--)switch(read()){
		case 1:l=read(),r=read(),x=read(),upd(l,x),upd(r+1,-x);break;
		case 2:upd(1,x=read());upd(2,-x);break;
		case 3:upd(1,-(x=read()));upd(2,x);break;
		case 4:writeln(query(read(),read()));break;
		case 5:writeln(query(1,1));break;}
}

RT 题目

2024/10/27 16:43
加载中...