TLE test4求调 玄关
查看原帖
TLE test4求调 玄关
526922
coool楼主2024/11/24 16:35
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+234;
#define int long long
int n,m,s;
int a[N], t[N*4];

void pushup(int cur){
	t[cur] = t[cur<<1] + t[cur<<1|1];
}

void build(int cur, int l, int r){
	if (l == r){
		t[cur] = a[l];
		return ;
	}
	int mid = l + r>> 1;
	build(cur<<1,l,mid);
	build(cur<<1|1,mid+1,r);
	pushup(cur);
}

void update1(int cur, int l,int r,int ql, int qr, int m){
	if (l == r ){
		t[cur] %= m;
		return ;
	}
	int mid = l + r >> 1;
	if (ql <= mid) update1(cur<<1,l,mid,ql,qr,m);
	if (qr > mid) update1(cur<<1|1,mid+1,r,ql,qr,m);
	pushup(cur);
}

void update2(int cur, int l, int r, int x, int val){
	if (l == r){
		t[cur] = val;
		return;
	}
	int mid = l+ r>>1;
	if (x <= mid) update2(cur<<1,l,mid,x,val);
	else update2(cur<<1|1,mid+1,r,x,val);
	pushup(cur);
}

void query(int cur, int l, int r, int ql,int qr){
	if (l == r){
		s += t[cur];
		return ;
	}
	int mid = l + r >> 1;
	if (ql <= mid) query(cur<<1,l,mid,ql,qr);
	if (qr > mid) query(cur<<1|1,mid+1,r,ql,qr);

}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	
	for (int i =1; i <= n; i++){
		cin >> a[i];
	}
	
	build(1,1,n);
	for (int i = 1; i<= m; i++){
		int op,l,r,k,x;
		cin >> op;
		if (op == 1){
			cin >> l >> r;
			s = 0;
			query(1,1,n,l,r);
			cout << s << '\n';
		}
		if (op == 2){
			cin >> l >> r >> x;
			update1(1,1,n,l,r,x);
		}
		if(op == 3){
			cin >> k>>x;
			update2(1,1,n,k,x);
		}
	}
	return 0;
}

2024/11/24 16:35
加载中...