比赛 线段数树状数组 评测结果 AAAAAAAAAA
题目名称 最大数 最终得分 100
用户昵称 jekyll 运行时间 2.412 s
代码语言 C++ 内存使用 9.47 MiB
提交时间 2018-06-18 19:58:00
显示代码纯文本
  1. #include<cstdio>
  2. #include<iostream>
  3. #define lc rt<<1
  4. #define rc rt<<1|1
  5. #define st 1, n, 1
  6. #define ls l, mid, rt<<1
  7. #define rs mid + 1, r, rt<<1|1
  8.  
  9. using namespace std;
  10.  
  11. typedef long long ll;
  12. const int INF = 1e9;
  13. const int maxN = 200005;
  14.  
  15. ll tree[maxN * 4], a[maxN], maxtag[maxN];
  16. ll n, m, d, t;
  17.  
  18. void maxupdate(ll P, ll l, ll r, ll rt, ll num)
  19. {
  20. tree[rt] = max(num, tree[rt]);
  21. ll mid = (l + r) >> 1;
  22. if (l == r) return;
  23. if (P <= mid) maxupdate(P, ls, num);
  24. if (mid < P) maxupdate(P, rs, num);
  25. }
  26.  
  27. ll query(ll L, ll R, ll l, ll r, ll rt)
  28. {
  29. if (L <= l && r <= R) return tree[rt];
  30. ll ans = 0, mid = (l + r) >> 1;
  31. if (L <= mid) ans = max(ans, query(L, R, ls));
  32. if (mid < R) ans = max(ans, query(L, R, rs));
  33. return ans;
  34. }
  35.  
  36. inline ll readll()
  37. {
  38. ll X = 0, w = 0; char ch = 0;
  39. while (ch > '9' || ch < '0') w = w | ch == '-', ch = getchar();
  40. while (ch <= '9' && ch >= '0') X = (X<<3) + (X<<1) + (ch^48), ch = getchar();
  41. return w ? -X: X;
  42. }
  43.  
  44. int main()
  45. {
  46. freopen("bzoj_1012.in", "r", stdin);
  47. freopen("bzoj_1012.out", "w", stdout);
  48. n = readll(), d = readll();
  49. for (int i = 1; i <= n; ++i)
  50. {
  51. char ch; cin >> ch;
  52. if (ch == 'A')
  53. {
  54. ll k = readll(); k = (k + t) % d;
  55. maxupdate(++m, st, k);
  56. }
  57. else
  58. {
  59. ll k = readll();
  60. printf("%lld\n", t = query(m - k + 1, m, st));
  61. }
  62. }
  63. return 0;
  64. }