求助只A9,10
查看原帖
求助只A9,10
718392
zhanglile楼主2023/10/16 08:58

rt

#include<bits/stdc++.h> 
#define R read()
#define P printf
#define int long long
using namespace std;
int read(){
	int x = 0, f = 1;char ch = getchar();
	while(ch < '0' || ch > '9')
		if(ch == '-') f = ch = -1;
		else ch = getchar();
	while(ch >= '0' && ch <= '9')
		x = (x << 3) + (x << 1) + ch - '0',
		ch = getchar();
	return x * f;
} 
const int N = 3e5 + 15;
int sum[N], pig, q, top1, top2, a[N];
struct treee{
	int t[N << 2], add[N << 2];
	treee(){
		memset(t, 0, sizeof t);
		memset(add, -1, sizeof add);
	}
	#define ls (k << 1)
	#define rs (k << 1 | 1)
	#define mid (l + r >> 1)
	void Add(int k, int v){
		t[k] = v;
		add[k] = v;
	}
	void pushd(int k){
		if(add[k] != -1){
			Add(ls, add[k]);
			Add(rs, add[k]);
			add[k] = -1;
		}
	}
	void moy(int k, int l, int r, int x, int y, int val){
		if(y < l || r < x) return;
//		P("(L, R) = %lld %lld\n", l, r);
		if(x <= l && r <= y) return Add(k, val), void();
		pushd(k);
		moy(ls, l, mid, x, y, val);
		moy(rs, mid + 1, r, x, y, val);
		t[k] = max(t[ls], t[rs]);
	}
	int query(int k, int l, int r, int x, int y){
		if(y < l || r < x) return -3e9;
		if(x <= l && r <= y) return t[k];
		pushd(k);
		int res = -3e9;
		res = max(res, query(ls, l, mid, x, y));
		res = max(res, query(rs, mid + 1, r, x, y));
		return res;
	}
}tree;
signed main(){
//	freopen("queue6.in", "r", stdin);
//	freopen("queue.out", "w", stdout);
	pig = R;q = R;
	pig = 0;top1 = 1;
	for(int i = 1;i <= q;++ i){
		int lzh = R;
		if(lzh == 1){
			int x = R;
			sum[++ top2] = sum[top2 - 1] + x;
			tree.moy(1, 1, N - 5, top2, top2, x);
		}else if(lzh == 2){
			int x = R;
			int l = top1, r = top2, res = l - 1;
			while(l <= r){
				if(sum[mid] - pig <= x) res = mid, l = mid + 1;
				else r = mid - 1; 
			}
			if(res >= top1) tree.moy(1, 1, N - 5, top1, res, - 3e9);
			top1 = res + 1; 
			pig += x;
		}else if(lzh == 3){
			int x = R;
			int l = top1, r = top2, res = l - 1;
			while(l <= r){
				if(sum[mid] - pig < x) res = mid, l = mid + 1;
				else r = mid - 1;
			}
			P("%lld\n", x - sum[res] + pig);
		}else{
			P("%lld\n", tree.query(1, 1, N - 5, top1, top2));
		}
//		P("l = %lld, r = %lld\n", top1, top2);
	}
	return 0;
}
2023/10/16 08:58
加载中...