比赛 线段数树状数组 评测结果 AAAAAAAAAA
题目名称 最大数 最终得分 100
用户昵称 jekyll 运行时间 2.412 s
代码语言 C++ 内存使用 9.47 MiB
提交时间 2018-06-18 19:58:00
显示代码纯文本
#include<cstdio>
#include<iostream>
#define lc rt<<1
#define rc rt<<1|1
#define st 1, n, 1
#define ls l, mid, rt<<1
#define rs mid + 1, r, rt<<1|1

using namespace std;

typedef long long ll;
const int INF = 1e9;
const int maxN = 200005;

ll tree[maxN * 4], a[maxN], maxtag[maxN];
ll n, m, d, t;

void maxupdate(ll P, ll l, ll r, ll rt, ll num)
{
	tree[rt] = max(num, tree[rt]);
	ll mid = (l + r) >> 1;
	if (l == r) return;
	if (P <= mid) maxupdate(P, ls, num);
	if (mid < P) maxupdate(P, rs, num);
}

ll query(ll L, ll R, ll l, ll r, ll rt)
{
    if (L <= l && r <= R) return tree[rt];
    ll ans = 0, mid = (l + r) >> 1;
    if (L <= mid) ans = max(ans, query(L, R, ls));
    if (mid < R) ans = max(ans, query(L, R, rs));
    return ans;
}

inline ll readll()  
{  
    ll X = 0, w = 0; char ch = 0;  
    while (ch > '9' || ch < '0') w = w | ch == '-', ch = getchar(); 
    while (ch <= '9' && ch >= '0') X = (X<<3) + (X<<1) + (ch^48), ch = getchar();  
    return w ? -X: X;  
}

int main()
{
	freopen("bzoj_1012.in", "r", stdin);
	freopen("bzoj_1012.out", "w", stdout);
	n = readll(), d = readll();
	for (int i = 1; i <= n; ++i)
	{
		char ch; cin >> ch;
		if (ch == 'A') 
		{
			ll k = readll(); k = (k + t) % d;
			maxupdate(++m, st, k);
		}
		else
		{
			ll k = readll();
			printf("%lld\n", t = query(m - k + 1, m, st));
		}
	}
	return 0;
}