NEFU 982 vd数蚂蚁

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);
        }
    }
}

你可能感兴趣的:(打表)