Learning4Fun ural 1613

/*题意:给出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;

    }
}