Pagini recente » Cod sursa (job #215508) | Cod sursa (job #3184146) | Cod sursa (job #1479290) | Cod sursa (job #2954451) | Cod sursa (job #3164405)
#include <iostream>
#include <fstream>
#include <cmath>
#include <unordered_map>
using namespace std;
bool is_unique(const unordered_map<int, int>& frecv){
for(auto i : frecv){
if(i.second>1) return false;
}
return true;
}
int main(){
int lim; cin>>lim;
int rmq_min[(int)log2(lim)+1][lim], rmq_max[(int)log2(lim)+1][lim];
for(int i=0; i<lim; i++){
cin>>rmq_min[0][i]; rmq_max[0][i]=rmq_min[0][i];
}
for(int p=2; (1<<(p-1))<=lim; p++){
for(int i=0; i<lim; i++){
rmq_min[p-1][i]=rmq_min[p-2][i];
rmq_max[p-1][i]=rmq_max[p-2][i];
int j=i+(1<<(p-2));
if(j<lim) rmq_min[p-1][i]=min(rmq_min[p-2][i], rmq_min[p-2][j]);
if(j<lim) rmq_max[p-1][i]=max(rmq_max[p-2][i], rmq_max[p-2][j]);
}
}
int nrq; cin>>nrq;
unordered_map<int, int> frecv_secv;
for(int i=0; i<nrq; i++){
int p1, p2; cin>>p1>>p2; p1--; p2--;
int exp=(int)log2(p2-p1+1);
int secv_min=min(rmq_min[exp][p1], rmq_min[exp][p2-(1<<exp)+1]);
int secv_max=max(rmq_max[exp][p1], rmq_max[exp][p2-(1<<exp)+1]);
frecv_secv.clear();
for(int j=p1; j<=p2; j++){
frecv_secv[rmq_min[0][j]]++;
}
if(secv_max-secv_min+1==p2-p1+1 && is_unique(frecv_secv)){
cout<<1;
}else{
cout<<0;
}
}
return 0;
}