Cod sursa(job #2928752)

Utilizator OlegutulOleg Sirbu Olegutul Data 23 octombrie 2022 19:58:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 2;
const int lg = 20;
ifstream in ("rmq.in");
ofstream out("rmq.out");
#define cin in
#define cout out

int sp[maxn][lg]; // sp[i][j] - > elementul minim pe intervalul [i, i + 2^j - 1]


void solve(){


}

int main(){
  // pow(2, k) = 1 << k;
  ios::sync_with_stdio(0); cin.tie(0);
	int n,m;
	cin >> n >> m;
	for (int i = 0; i < n; i++){
    cin >> sp[i][0];
	}
  for (int k = 1; k < lg; k++){
    for (int i = 0; i + (1 << k) - 1 < n; i++) {
      sp[i][k] = min(sp[i][k-1], sp[i + (1 << (k - 1))][k-1]);
    }
  }
  while (m--) {
    int l, r;
    cin >> l >> r;
    r--, l--;
    int k = log2(r - l + 1);
    cout << min(sp[l][k], sp[r - (1 << k) + 1][k]) << "\n";
  }
	return 0;
}