您的位置:首页 > 其它

1124 数量【水题...】

2015-09-06 20:57 387 查看


数量

时间限制:200 ms  |  内存限制:65535 KB
难度:0

描述

HJS大牛想去街上吃饭,街道旁边拴着很多狗,他想我堂堂......(省略n个字)岂会被狗咬,所以他很牛的从狗的面前经过,不管是否被上一条狗咬过,下次还会从狗的面前过(

J I A N)

现在问题来了,我们给狗编号从1...n,有多次询问,每次询问M,N这一段有多少狗咬过他有多少狗没有咬过他

输入输入有多组数据,每组数据有N,M代表N个狗,M次询问(n<=1000000)

接下来一行有n个数正数代表被狗咬,负数代表不咬,0代表不确定看心情,所以我们只计算确定的就可以了

接下来M行每行两个数a,b代表a到b这一段
输出每次查询输出一行,每行两个数中间有一个空格,分别代表咬人的狗的数量,没咬人的数量
样例输入
5 6
-1 -2 3 4 5
1 2
1 3
1 4
2 4
3 5
1 5


样例输出
0 2
1 2
2 2
2 1
3 0
3 2


只要明白用数组来保存每个位置的信息,然后最后直接输出需要的结果就可以了,没多少难度........

主要是明白用两个数组来分别保存就可以了.........

#include<stdio.h>
#include<string.h>
int x[1000005],y[1000005];
int main()
{
int n,m,i;
while(~scanf("%d%d",&n,&m))
{
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
for(i=1;i<=n;++i)
{
int a;
scanf("%d",&a);
x[i]=x[i-1];
y[i]=y[i-1];
if(a>0)//正的表示咬了...
{
x[i]=x[i-1]+1;
}
else if(a<0)//没咬
{
y[i]=y[i-1]+1;
}
}
int a,b;
for(i=0;i<m;++i)
{
scanf("%d%d",&a,&b);
printf("%d %d\n",x[b]-x[a-1],y[b]-y[a-1]);//输出
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: