记录编号 |
304184 |
评测结果 |
AAAAAAAATA |
题目名称 |
求和问题 |
最终得分 |
90 |
用户昵称 |
仰望星空 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
6.284 s |
提交时间 |
2016-09-07 20:01:00 |
内存使用 |
19.17 MiB |
显示代码纯文本
- #include<iostream>
- #include<cstdio>
- #define ll long long
- using namespace std;
- ll a[100001];
-
- struct tree
- {
- ll l,r,sum;
-
- }t[1000001];
-
- void build(ll l,ll r,ll k)
- {
- t[k].l=l;
- t[k].r=r;
- if(l==r)
- {
- t[k].sum=a[l];
- return;
- }
- ll mid=(l+r)/2;
- build(l,mid,k*2);
- build(mid+1,r,k*2+1);
- t[k].sum=t[k*2].sum+t[k*2+1].sum;
- return;
- }
-
- ll query(ll l,ll r,ll k)
- {
- if(t[k].l==l&&t[k].r==r)return t[k].sum;
- int mid=(t[k].l+t[k].r)/2;
- if(r<=mid)return query(l,r,k*2);
- if(l>mid)return query(l,r,k*2+1);
- return query(l,mid,k*2)+query(mid+1,r,k*2+1);
- }
-
- int main()
- {
- freopen("sum.in","r",stdin);
- freopen("sum.out","w",stdout);
- ll n,m,i,j,k;
- cin>>n;
- for(i=1;i<=n;i++)
- {
- cin>>a[i];
- }
- build(1,n,1);
- cin>>m;
- for(i=1;i<=m;i++)
- {
- cin>>j>>k;
- cout<<query(j,k,1)<<endl;
- }
- return 0;
- }