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;
}
}
}
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;
}
}
}
相关文章推荐
- 51nod:1081 子段求和(树状数组)
- 【51NOD-0】1081 子段求和
- 51nod 1081 子段求和
- 51nod 1081 子段求和
- 51nod_1081 子段求和
- 51Nod-1081 子段求和【前缀和】
- 51Nod-1081-子段求和
- 51Nod 1081 子段求和
- 51NOD 1081 子段求和
- 51Nod-1081 子段求和
- 51nod 1081 子段求和
- 51nod 1081 子段求和(树状数组)
- 51Nod 1081 子段求和(数组/树状数组)
- 51nod-1081[前缀和]子段求和
- 51Nod 1081 子段求和
- 51Nod - 1081 子段求和 前缀和算法
- 【51Nod】1081 子段求和
- 51Nod-1081-子段求和
- H 子段求和(51Nod 1081)
- 1081 子段求和