求助,全wa了
查看原帖
求助,全wa了
536396
Uuuuuur_楼主2022/7/14 13:11

不知道错在哪里,样例过了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int n = 200005;
ll m, d;
ll t;
ll maxv[1000005];
ll s;
void pushup(ll x) {
	maxv[x] = max(maxv[x << 1], maxv[x << 1 | 1]);
}
void init(ll l, ll r, ll id) {
	maxv[id] = -0x3ffffffff;
	if (l == r) {
		return ;
	}
	ll mid = (l + r) >> 1;
	init(l, mid, id << 1);
	init(mid + 1, r, id << 1 | 1); 
}
void insert(ll l, ll r, ll num, ll id) {
	if (l == r) {
		maxv[id] = num;
		return; 
	}
	ll mid = (l + r) >> 1;
	if (s <= mid) {
		insert(l, mid, num, id << 1);
	} else {
		insert
		(mid + 1, r, num, id << 1 | 1); 
	}
	pushup(id);
}
ll query(ll l, ll r, ll x, ll y, ll id) {
	if (x <= l && r <= y) {
		return maxv[id];
	} 
	ll ans = -0x3ffffffff;
	ll mid = (l + r) >> 1;
	if (x <= mid) ans = max(ans, query(l, mid, x, y, id << 1));
	if (y > mid) ans = max(ans, query(mid + 1, r, x, y, id << 1 | 1)); 
	return ans; 
} 
int main(){
	scanf("%lld%lld", &m, &d);
	init(1, n, 1);
	for (int i = 1; i <= m; i++) {
		char kong;
		scanf("%c", &kong);
		char c;
		ll num;
		scanf("%c%lld", &c, &num);
		if (c == 'A') {
			num += t;
			num %= d;
			s++;
			insert(1, m, num, 1);
		} else {
			ll ans = query(1, m, s - num + 1, m, 1);
			if (num == 0) {
				ans = 0;
			}
			printf("%lld\n", ans);	
			
			t = ans;
		}
	}
	return 0;
}
2022/7/14 13:11
加载中...