Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- // #define DEBUG
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef vector<ll> vll;
- typedef vector<int> vi;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- #define FF first
- #define SS second
- #define MP make_pair
- #define watch(x) cout << #x << " is " << x << endl
- vector<pll> t;
- vll a;
- ll INF = ll(1e9);
- void build(ll v, ll l, ll r) {
- // watch(v);
- // watch(l);
- // watch(r);
- if(r - l == 1) {
- // t[v].FF = a[l];
- // t[v].SS = l;
- t[v] = MP(a[l], l);
- return;
- }
- ll mid = l + (r - l) / 2;
- build(2 * v, l, mid);
- build(2 * v + 1, mid, r);
- t[v] = min(t[2 * v], t[2 * v + 1]);
- return;
- }
- pll get(ll v, ll l, ll r, ll ql, ll qr) {
- if(ql <= l && r <= qr) {
- return t[v];
- }
- if(r <= ql || qr <= l) {
- return MP(INF, INF);
- }
- ll mid = l + (r - l) / 2;
- pll ansl = get(2 * v, l, mid, ql, qr);
- pll ansr = get(2 * v + 1, mid, r, ql, qr);
- return min(ansl, ansr);
- }
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(NULL);
- #ifdef DEBUG
- #else
- freopen("rmq.in", "r", stdin);
- freopen("rmq.out", "w", stdout);
- #endif
- ll n, m;
- cin >> n >> m;
- a.resize(n + 1);
- t.resize(4 * n);
- for(ll i = 1; i <= n; i++) {
- cin >> a[i];
- }
- build(1, 1, n + 1);
- ll l, r;
- for(ll i = 0; i < m; i++) {
- cin >> l >> r;
- cout << get(1, 1, n + 1, l, r + 1).SS << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment