Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define _USE_MATH_DEFINES
- #include "bits/stdc++.h"
- //#include <intrin.h>
- #define fore(i,a,b) for(int i = a; i < (b); i++)
- #define fr(i,a,b) for(int i = a - 1; i >= b; i--)
- #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
- #define N 300005
- #define inf 2000000000
- #define EPS 1e-6
- #define MOD (ll)1e15
- #define __builtin_popcount(x) __popcnt(x)
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pr;
- typedef pair<int, pair<int, int>> tup;
- struct SegTree {
- vector<pair<pair<int, int>, pair<int, int>>> tree;
- void resize(int n)
- {
- tree.resize(4 * n);
- }
- void build(int l, int r, int v, vector<int> &a)
- {
- if (l == r)
- tree[v] = { {a[l], l}, {a[l], l} };
- else
- {
- int m = (r + l) / 2;
- build(l, m, 2 * v, a);
- build(m + 1, r, 2 * v + 1, a);
- tree[v].first = min(tree[2 * v].first, tree[2 * v + 1].first);
- tree[v].second = max(tree[2 * v].second, tree[2 * v + 1].second);
- }
- }
- pair<pair<int, int>,pair<int,int>> query(int ql, int qr, int l, int r, int v)
- {
- if (ql > qr)
- return { {inf, -1}, {-inf, -1} };
- else if (ql == l && qr == r)
- return tree[v];
- else
- {
- int m = (r + l) / 2;
- pair<pair<int, int>, pair<int, int>> res1 = query(ql, min(qr, m), l, m, 2 * v);
- pair<pair<int, int>, pair<int, int>> res2 = query(max(m + 1, ql), qr, m + 1, r, 2 * v + 1);
- return { min(res1.first, res2.first), max(res1.second, res2.second) };
- }
- }
- };
- inline void solve()
- {
- int n, m;
- cin >> n >> m;
- vector<int> v(n);
- fore(i, 0, n)
- cin >> v[i];
- SegTree t;
- t.resize(n);
- t.build(0, n - 1, 1, v);
- fore(i, 0, m)
- {
- int l, r, q;
- cin >> l >> r >> q;
- pair<pair<int, int>, pair<int, int>> res = t.query(l - 1, r - 1, 0, n - 1, 1);
- if (res.first.first == q && res.second.first == q)
- cout << -1;
- else if (res.first.first != q)
- cout << res.first.second + 1;
- else
- cout << res.second.second + 1;
- cout << '\n';
- }
- }
- int main()
- {
- fast;
- #if defined(_DEBUG)
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- int q = 1;
- //cin >> q;
- while (q--)
- {
- solve();
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement