题目链接:https://cn.vjudge.net/problem/CodeForces-302A
Description:
Eugeny has array a = a1, a2, ..., an, consisting of n integers. Each integer ai equals to -1, or to 1. Also, he has m queries:
- Query number i is given as a pair of integers li, ri (1 ≤ li ≤ ri ≤ n).
- The response to the query will be integer 1, if the elements of array a can be rearranged so as the sum ali + ali + 1 + ... + ari = 0, otherwise the response to the query will be integer 0.
Help Eugeny, answer all his queries.
Input
The first line contains integers n and m (1 ≤ n, m ≤ 2·105). The second line contains n integers a1, a2, ..., an (ai = -1, 1). Next m lines contain Eugene's queries. The i-th line contains integers li, ri (1 ≤ li ≤ ri ≤ n).
Output
Print m integers — the responses to Eugene's queries in the order they occur in the input.
Examples
Input
2 3 1 -1 1 1 1 2 2 2 Output 0 1 0Input
5 5 -1 1 1 1 -1 1 1 2 3 3 5 2 5 1 5Output
0 1 0 1 0
分析:就是问能否从这n个数中找出ri-li+1个数,使和为0。 可以输出1,不可以输出0。因为只有-1和1,所以要使得和为0则必有ri-li+1个1和ri-li+1个0。若ri-li+1为奇数肯定不行,为偶数,且(ri-li+1)/2 <= 1的个数 && <= -1的个数,则可以。
AC代码:
#include <iostream>
using namespace std;
int main()
{
int n,m,pos=0,minus=0,t;
cin >> n >> m;
for(int i=0;i<n;i++) {
cin >> t;
if(t == 1)
pos++;
else
minus++;
}
int l,r,interv;
for(int i=0;i<m;i++) {
cin >> l >> r;
interv = r-l+1;
if(interv & 1) {
cout << "0\n";
continue;
}
interv /= 2;
if(interv > pos || interv > minus) {
cout << "0\n";
continue;
}
cout << "1\n";
}
}