
/*题意:给出n个数,给出q个询问L R V.对于每个询问问L R之间是否存在v
*解法:把原数组连同下标一起排序。对于每个询问问查询一个第一个大于等于v且下标大于等于L的
*的数字。若该数字和v相同且下标在LR之间。则为1否则为0.
*
*/
#include <functional>
#include <algorithm>
#include <iostream>
//#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cstring>
#include <cassert>
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <ctime>
#include <list>
#include <set>
#include <map>
#include <math.h>
using namespace std;
struct data
{
int val;
int rank;
bool operator <(const data &d)const
{
if (d.val == val)
return rank < d.rank;
return val < d.val;
}
};
vector<data> base;
int main()
{
freopen("data.in", "r", stdin);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
data a;
cin >> a.val;
a.rank = i;
base.push_back(a);
}
sort(base.begin(), base.end());
int q;
cin >> q;
vector<data>::iterator it;
for (int i = 0; i < q; i++)
{
int x, y, d;
data a;
cin >> x >> y >> d;
a.val = d;
a.rank = x;
it = lower_bound(base.begin(), base.end(), a);
if (it->val == d && (it->rank >= x && it->rank <= y))
cout << 1;
else
cout << 0;
}
}
近期评论