Cod sursa(job #2683297)
| Utilizator | Data | 10 decembrie 2020 21:04:11 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.07 kb |
#include "bits/stdc++.h"
using namespace std;
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m;
cin >> n >> m;
vector<int> v(n);
vector<int> ab;
int d = 320;
for(int i = 0; i < n; i++) {
cin >> v[i];
if(i % d == 0) {
ab.push_back(v[i]);
}
else {
if(ab[ab.size() - 1] > v[i]) {
ab[ab.size() - 1] = v[i];
}
}
}
for ( int i = 0 ; i < m; i++) {
int s = 1000001;
int a, b;
cin >> a >> b;
a--;
b--;
int e = a;
while(e % d != 0 && e <= b){
if(s > v[e]){
s = v[e];
}
e++;
}
while(e + d <= b){
if(s > ab[e / d]){
s = ab[e / d];
}
e+=d;
}
while(e <= b){
if(s > v[e]){
s = v[e];
}
e++;
}
cout << s << '\n';
}
return 0;
}
