记录编号 |
166269 |
评测结果 |
AAAAAAAAAA |
题目名称 |
树 |
最终得分 |
100 |
用户昵称 |
forever |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.889 s |
提交时间 |
2015-06-14 20:07:00 |
内存使用 |
6.42 MiB |
显示代码纯文本
- #include<iostream>
- #include<cstdlib>
- #include<cstdio>
- using namespace std;
- inline int in()
- {
- char c=getchar();
- int x=0;
- while(c<'0'||c>'9')c=getchar();
- for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
- return x;
- }
- int n,sum[800060],m,k,h,a[800060];
- void Build(int x,int y,int r)
- {
- if(x==y)
- {
- a[x]=sum[r]=in();
- return;
- }
- int mid=(x+y)>>1;
- Build(x,mid,r<<1);
- Build(mid+1,y,(r<<1)+1);
- sum[r]=sum[r<<1]+sum[(r<<1)+1];
- }
- void add(int x,int y,int r,int u,int l)
- {
- if(r==u)
- {
- sum[l]+=y;
- return;
- }
- int mid=(r+u)>>1;
- if(x<=mid)
- add(x,y,r,mid,l*2);
- else
- add(x,y,mid+1,u,l*2+1);
- sum[l]=sum[l<<1]+sum[(l<<1)+1];
- }
- int wen(int x,int y,int r,int u,int l)
- {
- if(x<=r&&y>=u)
- {
- return sum[l];
- }
- int mid=(r+u)>>1;
- int he=0;
- if(x<=mid)
- he+=wen(x,y,r,mid,l<<1);
- if(y>mid)
- he+=wen(x,y,mid+1,u,(l<<1)+1);
- return he;
- }
- int main()
- { freopen("treed.in","r",stdin);
- freopen("treed.out","w",stdout);
- n=in();
- Build(1,n,1);
- /*for(int i=1;i<=n;++i)
- cout<<sum[i]<<" ";
- cout<<endl;*/
- m=in();
- for(int i=1;i<=m;++i)
- {
- k=in();
- h=in();
- printf("%.2f\n",wen(k,h,1,n,1)*3.14);
- int g=(k+h)>>1;
- add(g,-a[g],1,n,1);
- a[g]=0;
- }
- //system("pause");
- }