记录编号 398332 评测结果 AAAAAAAAAA
题目名称 [JSOI 2008] 最大数 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.513 s
提交时间 2017-04-21 22:40:59 内存使用 13.28 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. int m,l;
  6. int jl[200001],dq=1;
  7. char cz;
  8. long long d,n,t;
  9. struct mn
  10. {
  11. int l,r;
  12. long long mx;
  13. mn(){l=0;r=0;mx=0;}
  14. }tree[800001];
  15. void build(int l,int r,int now)
  16. {
  17. int mid=(l+r)/2;
  18. tree[now].l=l;
  19. tree[now].r=r;
  20. if(l==r)
  21. {
  22. jl[l]=now;
  23. return;
  24. }
  25. build(l,mid,2*now);
  26. build(mid+1,r,2*now+1);
  27. }
  28. void gx(int now)
  29. {
  30. while(now)
  31. {
  32. tree[now].mx=max(tree[2*now].mx,tree[2*now+1].mx);
  33. now/=2;
  34. }
  35. }
  36. void s(int dl,int dr,int now)
  37. {
  38. int mid=(tree[now].l+tree[now].r)/2;
  39. if(dl==tree[now].l&&dr==tree[now].r)
  40. {
  41. t=max(tree[now].mx,t);
  42. return;
  43. }
  44. if(dr<=mid)
  45. {
  46. s(dl,dr,2*now);
  47. return;
  48. }
  49. if(dl>mid)
  50. {
  51. s(dl,dr,2*now+1);
  52. return;
  53. }
  54. s(dl,mid,2*now);
  55. s(mid+1,dr,2*now+1);
  56. }
  57. int main()
  58. {
  59. freopen("bzoj_1012.in","r",stdin);
  60. freopen("bzoj_1012.out","w",stdout);
  61. scanf("%d%lld",&m,&d);
  62. build(1,200000,1);
  63. for(int i=1;i<=m;i++)
  64. {
  65. scanf("%s",&cz);
  66. if(cz=='A')
  67. {
  68. scanf("%lld",&n);
  69. n+=t;
  70. n%=d;
  71. tree[jl[dq]].mx=n;
  72. gx(jl[dq]/2);
  73. dq++;
  74. }
  75. else
  76. {
  77. scanf("%d",&l);
  78. t=0;
  79. s(dq-l,dq-1,1);
  80. printf("%lld\n",t);
  81. }
  82. }
  83. return 0;
  84. }
  85.