【法則を探す】【NOIP膜あなた試合】膜拝azui


問題の説明
ある日、AさんはJ・Gさんに水の問題をあげました.J・Gさんは一目で秒になりました.今、J・Gさんはあなたたちを試験したいと思っています.AさんはN個のランプを持っていて、列に並んでいます.今、Aさんはazuiという奇抜な操作をしています.私たちはつけているランプを数字1と見なしています.消しているランプを数字0と見なしています.0 azui 0=1,0 azui 1=0,1 azui 1=1,1 azui 0=0と定義しています.Aさんは今、azui(l,r)という質問をしています.左から右のl番目のランプを右に1つのazuiからr番目のランプに聞いた結果は何ですか.
入力
1行目の整数Nは、シーケンスの長さを表す.2行目N個目の整数Aiは、数ごとに0ではなく1であり、ランプがオフなのかオンなのかを示す.3行目の整数Mは、問い合わせの個数を表す.4~M+3行目、各行2つの整数lとrは、azui(l,r)への問い合わせを表す.
しゅつりょく
共にM行,i行目はi番目の質問に答える.
サンプル入力
5 1 0 1 0 1 5 2 3 3 4 4 5 1 3 1 4
サンプル出力
0 0 0 0 1
データ範囲
30%のデータに対して、NおよびM<=5000は80%のデータに対して、NおよびM<=500000は100%のデータに対して、NおよびM<=1000000
ぶんせき
このazui演算は同和です.同じものは1であり、異なるものは0である.すなわち
bool azui(bool a,bool b){return a==b;}

同じ法則を挙げることができます
Example
Answer
0 0
1
0 1
0
1 0
0
1 1
1
0 0 0
0
0 0 1
1
0 1 0
1
0 1 1
0
1 0 0
1
1 0 1
0
1 1 0
0
1 1 1
1
そして,配列中の0の個数に関係して,数の配列方式とは無関係であることが分かった.同じ結合律(a⊙b)⊙c=a⊙(b⊙c)も発見できます.あなたはこれを発見しました.実は減らすことができます.接頭辞を求めて、それから減らして、求めました.
ソースコード
#include
#include
#include
using namespace std;
int n,m,l,r;
const int N=1000001;
bool azui(int x,int y){return x==y;}
bool a[N];
void get(int &a){
    a=0;char ch=getchar();
    while(ch<'0'||ch>'9')   ch=getchar();
    while(ch>='0'&&ch<='9'){a=a*10+ch-'0';ch=getchar();}
}
void get(bool &a){
    char ch=getchar();while(ch<'0'||ch>'9')ch=getchar();
    if(ch=='0') a=0;
    else a=1;
}
int main()
{
    get(n);
    for(int i=1;i<=n;i++)
        get(a[i]);
    for(int i=2;i<=n;i++)
        a[i]=azui(a[i],a[i-1]);
    get(m);
    while(m--){
        get(l);get(r);
        printf("%d
"
,l==1?a[r]:azui(a[l-1],a[r])); } }