1 solutions
-
0
C++ :
#include<cstdio> using namespace std; int T,n;double sum[700000]; double anss[255000]; int in(); void Push(int i) { sum[i]=sum[i<<1]+sum[i<<1|1]; } void build(int l,int r,int i) { if(l==r) { T++; scanf("%lf",&sum[i]); anss[T]=sum[i]; return ; } int m=(l+r)>>1; build(l,m,i<<1); build((m)+1,r,i<<1|1); Push(i); } void updata(int a,int add,int l,int r,int i) { if(l==r) { sum[i]+=add; return ; } int m=(l+r)>>1; if(a<=m) updata(a,add,l,m,i<<1); else updata(a,add,m+1,r,i<<1|1); Push(i); } double query(int L,int R,int l,int r,int i) { if(L<=l&&R>=r) return sum[i]; double result=0.0; int m=(l+r)>>1; if(L<=m) result+=query(L,R,l,m,i<<1); if(R>m) result+=query(L,R,m+1,r,i<<1|1); return result; } int main() { char c[8]; int u=T; int a,b; n=in(); build(1,n,1); int m; m=in(); for(int i=1;i<=m;i++) { a=in(); b=in(); printf("%.2lf\n",query(a,b,1,n,1)*3.14); updata((a+b)/2,-anss[(a+b)/2],1,n,1); anss[(a+b)/2]=0; } //while(1); } 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; }
- 1
Information
- ID
- 18436
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By