您的位置:首页 > 其它

51nod 1081 子段求和

2016-12-28 15:49 232 查看
题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1081
题解:

直接暴力会超时,所以,这里选用树状数字来进行,但是,这里需要注意的是,数据的范围比较大,会出现超int的情况的出现。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 5*1e4+10;
#define met(a,b) memset(a,b,sizeof(a))
ll num[maxn];
ll n,m;

int main()
{
while(cin>>n)
{
met(num,0);
for(ll i=1;i<=n;i++)
{
ll temp;
cin>>temp;
num[i]=num[i-1]+temp;
}
cin>>m;
while(m--)
{
ll x,y;
cin>>x>>y;
ll ans=num[x+y-1]-num[x-1];
cout<<ans<<endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: