记录编号 404193 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 迷妹 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 1.163 s
提交时间 2017-05-13 07:35:53 内存使用 7.56 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int n,q;
  6. int ql,qr;
  7. int N[100001],Q[4];
  8. struct stree
  9. {
  10. int l,r;
  11. int sum[4];
  12. stree(){l=0;r=0;memset(sum,0,sizeof(sum));}
  13. }tree[300001];
  14. void build(int l,int r,int now)
  15. {
  16. int mid=(l+r)/2;
  17. tree[now].l=l;tree[now].r=r;
  18. if(l==r)
  19. {
  20. tree[now].sum[N[l]]++;
  21. return;
  22. }
  23. build(l,mid,2*now);
  24. build(mid+1,r,2*now+1);
  25. tree[now].sum[1]=tree[2*now].sum[1]+tree[2*now+1].sum[1];
  26. tree[now].sum[2]=tree[2*now].sum[2]+tree[2*now+1].sum[2];
  27. tree[now].sum[3]=tree[2*now].sum[3]+tree[2*now+1].sum[3];
  28. }
  29. void search(int l,int r,int now)
  30. {
  31. int mid=(tree[now].l+tree[now].r)/2;
  32. if(tree[now].l==l&&tree[now].r==r)
  33. {
  34. Q[1]+=tree[now].sum[1];
  35. Q[2]+=tree[now].sum[2];
  36. Q[3]+=tree[now].sum[3];
  37. return;
  38. }
  39. if(r<=mid)
  40. {
  41. search(l,r,2*now);
  42. return;
  43. }
  44. if(l>mid)
  45. {
  46. search(l,r,2*now+1);
  47. return;
  48. }
  49. search(l,mid,2*now);
  50. search(mid+1,r,2*now+1);
  51. }
  52. int main()
  53. {
  54. freopen("fans.in","r",stdin);
  55. freopen("fans.out","w",stdout);
  56. scanf("%d%d",&n,&q);
  57. for(int i=1;i<=n;i++)
  58. {
  59. scanf("%d",&N[i]);
  60. }
  61. build(1,n,1);
  62. for(int i=1;i<=q;i++)
  63. {
  64. scanf("%d%d",&ql,&qr);
  65. search(ql,qr,1);
  66. printf("%d %d %d\n",Q[1],Q[2],Q[3]);
  67. Q[1]=0;Q[2]=0;Q[3]=0;
  68. }
  69. return 0;
  70. }