Map + lower_bound
轻松解决;
CODE:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include<map>
#include<sstream>
#include<iostream>
using namespace std;
#define FOR(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define DOR(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)
#define bug puts("Fuck");
#define LL long long
#define pb push_back
#define mp make_pair
#define nMax 101000
#define eps 1e-8
#define inf 0x7fffffff
map<int,vector<int> > S;
int n,q,a,l,r;
char ans[nMax];
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
while(~scanf("%d",&n)){
S.clear();
int tot=0;
FOR(i,1,n) {
scanf("%d",&a);
S[a].pb(i);
}
scanf("%d",&q);
FOR(i,0,q-1) {
scanf("%d%d%d",&l,&r,&a);
vector<int>::iterator it = lower_bound(S[a].begin(),S[a].end(),l);
if(it==S[a].end() || *it>r) ans[i]='0';
else ans[i]='1';
}
ans[q]='\0';
printf("%s\n",ans);
}
return 0;
}