记录编号 166269 评测结果 AAAAAAAAAA
题目名称 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.889 s
提交时间 2015-06-14 20:07:00 内存使用 6.42 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstdio>
  4. using namespace std;
  5. inline int in()
  6. {
  7. char c=getchar();
  8. int x=0;
  9. while(c<'0'||c>'9')c=getchar();
  10. for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
  11. return x;
  12. }
  13. int n,sum[800060],m,k,h,a[800060];
  14. void Build(int x,int y,int r)
  15. {
  16. if(x==y)
  17. {
  18. a[x]=sum[r]=in();
  19. return;
  20. }
  21. int mid=(x+y)>>1;
  22. Build(x,mid,r<<1);
  23. Build(mid+1,y,(r<<1)+1);
  24. sum[r]=sum[r<<1]+sum[(r<<1)+1];
  25. }
  26. void add(int x,int y,int r,int u,int l)
  27. {
  28. if(r==u)
  29. {
  30. sum[l]+=y;
  31. return;
  32. }
  33. int mid=(r+u)>>1;
  34. if(x<=mid)
  35. add(x,y,r,mid,l*2);
  36. else
  37. add(x,y,mid+1,u,l*2+1);
  38. sum[l]=sum[l<<1]+sum[(l<<1)+1];
  39. }
  40. int wen(int x,int y,int r,int u,int l)
  41. {
  42. if(x<=r&&y>=u)
  43. {
  44. return sum[l];
  45. }
  46. int mid=(r+u)>>1;
  47. int he=0;
  48. if(x<=mid)
  49. he+=wen(x,y,r,mid,l<<1);
  50. if(y>mid)
  51. he+=wen(x,y,mid+1,u,(l<<1)+1);
  52. return he;
  53. }
  54. int main()
  55. { freopen("treed.in","r",stdin);
  56. freopen("treed.out","w",stdout);
  57. n=in();
  58. Build(1,n,1);
  59. /*for(int i=1;i<=n;++i)
  60. cout<<sum[i]<<" ";
  61. cout<<endl;*/
  62. m=in();
  63. for(int i=1;i<=m;++i)
  64. {
  65. k=in();
  66. h=in();
  67. printf("%.2f\n",wen(k,h,1,n,1)*3.14);
  68. int g=(k+h)>>1;
  69. add(g,-a[g],1,n,1);
  70. a[g]=0;
  71. }
  72. //system("pause");
  73. }