记录编号 |
58230 |
评测结果 |
AAAAAAAAAA |
题目名称 |
树 |
最终得分 |
100 |
用户昵称 |
feng |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.608 s |
提交时间 |
2013-04-18 18:23:42 |
内存使用 |
11.54 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
struct node{
long long data;
}Tree[1000001];
int n,ax,ay,delta;
int a[200002];
void updata(int l,int r,int root){
if (l>ay || r<ax) return;
if (l>=ax && r<=ay){
if (Tree[root].data!=0 || delta>=0)
Tree[root].data+=delta;
// if (Tree[root].data<0 && delta<0)
// Tree[root].data+=delta;
return ;
}
int m=(l+r)/2;
updata(l,m,root*2);
updata(m+1,r,root*2+1);
Tree[root].data=Tree[root*2].data+Tree[root*2+1].data;
}
long long search(int l,int r,int root){
if (l>ay || r<ax) return 0;
if (l>=ax && r<=ay){
return Tree[root].data;
}
int m=(l+r)/2;
long long tmp1,tmp2;
tmp1=search(l,m,root*2);
tmp2=search(m+1,r,root*2+1);
return tmp1+tmp2;
}
void init(){
freopen("treed.in","r",stdin);
freopen("treed.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
ax=i;
ay=i;
delta=a[i];
updata(1,n,1);
}
}
void work(){
long long tmp1,tmp2,tmp;
int m;
scanf("%d",&m);
for (int i=1;i<=m;i++){
scanf("%d%d",&ax,&ay);
tmp=search(1,n,1);
tmp2=tmp*14;
tmp1=tmp*3+tmp2/100;
tmp2=tmp2%100;
cout<<tmp1<<'.';
if (tmp2<10) cout<<'0';
cout<<tmp2<<endl;
// printf("%d.%d\n",tmp1,tmp2);
ax=(ax+ay)/2;
ay=ax;
delta=-a[ax];
updata(1,n,1);
}
}
int main()
{
init();
work();
return 0;
}