记录编号 |
58243 |
评测结果 |
AAAAAAAAAA |
题目名称 |
树 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.706 s |
提交时间 |
2013-04-18 18:37:47 |
内存使用 |
12.64 MiB |
显示代码纯文本
#include <fstream>
#include <iomanip>
#define F_I "treed.in"
#define F_O "treed.out"
using namespace std;
ifstream fin(F_I);
ofstream fout(F_O);
const int Nx=600002;
int N,M,A[Nx/2],Pos[Nx/2],Sum;
class IT{
public:
int l,r,s,suc[2];
}Seg[Nx];
#define H Seg[p]
#define L Seg[p].suc[0]
#define R Seg[p].suc[1]
void mt(int p){
H.s=Seg[L].s+Seg[R].s;
}
void Build_IT(int p,int l,int r){
int m=(l+r)/2;
H.l=l;
H.r=r;
if(l==r){
H.s=A[l];
Pos[l]=p;
return;
}
H.suc[0]=p<<1;
H.suc[1]=(p<<1)+1;
Build_IT(p<<1,l,m);
Build_IT((p<<1)+1,m+1,r);
mt(p);
}
void query(int p,int l,int r){
int m=(H.l+H.r)/2;
if(H.l==l && H.r==r){
Sum+=H.s;
return;
}
if(m<l) query(R,l,r);
else
if(m>=r)query(L,l,r);
else{
query(L,l,m);
query(R,m+1,r);
}
}
void init(){
int i;
fin>>N;
for(i=1;i<=N;i++)
fin>>A[i];
Build_IT(1,1,N);
}
void Processing(){
int i,a,b;
fin>>M;
for(i=1;i<=M;i++){
Sum=0;
fin>>a>>b;
query(1,a,b);
int Del=(a+b)/2,j=Pos[Del];
Seg[j].s=0;
j=j>>1;
while(j){
mt(j);
j=j>>1;
}
fout<<setiosflags(ios::fixed)<<setprecision(2)<<double(Sum)*3.14<<endl;
}
}
int main(){
init();
Processing();
fin.close();
fout.close();
return 0;
}