Nu aveti permisiuni pentru a descarca fisierul grader_test4.ok
Cod sursa(job #1937351)
| Utilizator | Data | 23 martie 2017 21:43:33 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1 kb |
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("rmq.out");
int n, m, A[100004], M[100005][20];
void set_values()
{
for(int j = 1; (1 << j) <= n; ++j)
for(int i = 1; i + (1 << j) - 1 <= n; ++i)
if(M[i][j - 1] <= M[i + (1 << (j - 1))][j - 1])
M[i][j] = M[i][j - 1];
else M[i][j] = M[i + (1 << (j - 1))][j - 1];
}
int solve(int x, int y)
{
if(x > y) return (1 << 30);
int i;
for(i = 0; x + (1 << i) - 1 <= y; ++i);
return min(M[x][i - 1], M[y - (1 << (i - 1)) + 1][i - 1]);
}
void read()
{
ifstream fin("rmq.in");
fin >> n >> m;
for(int i = 1; i <= n; ++i){
fin >> A[i];
M[i][0] = A[i];
}
set_values();
int x, y;
for(int i = 1; i <= m; ++i){
fin >> x >> y;
int k;
for(k = 0; x + (1 << k) - 1 <= y; ++k);
fout << min(M[x][k - 1], M[y - (1 << (k - 1)) + 1][k - 1]) << '\n';
}
}
int main()
{
read();
return 0;
}
