Mai intai trebuie sa te autentifici.
Cod sursa(job #2614064)
Utilizator | Data | 11 mai 2020 10:58:20 | |
---|---|---|---|
Problema | Range minimum query | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.66 kb |
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#define MAXV 100001
using namespace std;
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, x, y;
int v[MAXV][20];
/// Read data
fin>>n>>m;
for(int i=0;i<n;i++){
fin>>x;
v[i][0] = x;
}
int pow = 1;
for(int j=1;pow*2<=n;j++){
for(int i=0;i+pow*2-1<n;i++)
v[i][j] = min(v[i][j-1], v[i+pow][j-1]);
pow*=2;
}
for(int i=0;i<m;i++){
fin>>x>>y;
x--;y--;
int lg = static_cast<int>(log2(y-x+1));
fout<<min(v[x][lg], v[y-lg*2+1][lg])<<'\n';
}
return 0;
}