后一行TLE
  • 板块P2357 守墓人
  • 楼主Yhlo_Yzj
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/4/12 21:29
  • 上次更新2023/10/28 03:52:56
查看原帖
后一行TLE
246822
Yhlo_Yzj楼主2022/4/12 21:29
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN =2 * 1e5 + 5;
int tree[4 * MAXN] , a[MAXN];
int n , m;
inline int read() {
    int s = 0, w = 1;
    char ch = getchar();
    while(! isdigit(ch)) {
		if(ch == '-') {
			w = -1;
		}
		ch = getchar();
	}
    while(isdigit(ch)){
		s = (s << 1) + (s << 3) + (ch ^ 48);
		ch = getchar();
	}
    return s * w;
}
void pushup(int cur){
	tree[cur] = tree[2 * cur] + tree[2 * cur + 1];
	return ;
}
void build(int cur , int lt , int rt){
	if(lt == rt){
		tree[cur] = a[lt];
		return ;
	}
	int mid = (lt + rt) >> 1;
	build(2 * cur , lt , mid);
	build(2 * cur + 1 , mid + 1 , rt);
	pushup(cur);
	return ;
}
void update(int cur , int lt , int rt , int qx , int qy , int val){
	if(qy < lt || rt < qx){
		return ;
	}
	if(lt == rt && qx <= lt && lt <= qy){
		tree[cur] += val;
		return ;
	}
	int mid = (lt + rt) >> 1;
	update(2 * cur , lt , mid , qx , qy , val);
	update(2 * cur + 1 , mid + 1 , rt , qx , qy , val);
	pushup(cur); 
	return ;
}
int query(int cur , int lt , int rt , int qx , int qy){
	if(qy < lt || rt < qx){
		return 0;
	}
	if(qx <= lt && rt <= qy){
		return tree[cur];
	}
	int mid = (lt + rt) >> 1;
	int left = query(2 * cur , lt , mid , qx , qy);
	int right = query(2 * cur + 1 , mid + 1 , rt , qx , qy);
	return left + right; 
}
signed main () {
	n = read();
	m = read();
	for(int i = 1;i <= n;i ++){
		a[i] = read();
	}
	build(1 , 1 , n);
	int sum = a[1];
	for(int i = 1;i  <=m;i ++){
		int l;
		l = read();
		if(l == 1){
			int lt , rt , k;
			cin >> lt >> rt >> k;
			if(lt == 1){
				sum += k;
				update(1 , 1 , n , lt + 1, rt , k);
			}else
				update(1 , 1 , n , lt, rt , k);
		}else if(l == 2){
			int k;
			k = read();
			sum += k;
		}else if(l == 3){
			int k;
			k = read();
			sum -= k; 
		}else if(l == 4){
			int lt , rt;
			lt = read();
			rt = read();
			if(lt == 1){
				int key = query(1 , 1 , n , lt + 1, rt);
				printf("%lld \n", key + sum);
			}else{
				int key = query(1 , 1 , n , lt, rt);
				printf("%lld \n", key);				
			}
		}else{
			printf("%lld\n",  sum);
		}
	}
	return 0;
}
2022/4/12 21:29
加载中...