vd数蚂蚁
vd数蚂蚁
Problem : 982 | Time Limit : 2000ms | Memory Limit : 65536K |
description
vd闲着无聊就喜欢蹲在蚂蚁窝旁数蚂蚁,他的小伙伴们偶尔会路过,假装关心的问问有多少只进出。
vd会记下n([1,n])分钟内,每分钟有多少蚂蚁经过:如果有2只出来就是2,如果有2只进去就是-2,一进一出就是0。
小伙伴会在路过m次,每次路过会询问第t1i到t2i(1<=t1i<=t2i<=n)分钟总共进出的蚂蚁只数数。
input
多组输入输出。每组第一行,两个正整数n,m(1<=n,m<=10^5)。
第二行是n个整数,表示第i分钟经过了ai只(|ai|<=100)。
接下来m行,每行一个整数,表示t1i,t2i。
output
对每一次询问输出答案(一行一个整数)。
sample_input
5 4
2 -2 2 5 0
1 1
1 2
3 4
3 5
sample_output
2
0
7
7
hint
source
打表思想。
AC code:
</pre><pre name="code" class="cpp">#include<iostream>
#include<cstdio>
using namespace std;
int a[200000];
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
a[0]=0;
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]+a[i];
}
while(m--)
{
int b,c;
int sum=0;
scanf("%d%d",&b,&c);
printf("%d\n",a[c]-a[b-1]);
}
}
}
Time Limit Exceeded :
#include<iostream>
#include<cstdio>
using namespace std;
int a[200000];
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
while(m--)
{
int b,c;
int sum=0;
scanf("%d%d",&b,&c);
for(int i=b;i<=c;i++)
sum+=a[i];
printf("%d\n",sum);
}
}
}