Cod sursa(job #1785756)
Utilizator | Data | 21 octombrie 2016 21:33:26 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.57 kb |
#include <fstream>
using namespace std;
ifstream ka("rmq.in");
ofstream ki("rmq.out");
int b[100005][17], v[100005], n, m, x, y;
int main()
{
ka >> n >> m;
for(int i = 1; i <= n; i++)
ka >> b[i][0];
for(int i = 2; i <= n; i++)
v[i] = 1 + v[i>>1];
for(int j = 1; (1 << j) <= n; j++)
for(int i = 1; i <= n-(1 << j); i++)
b[i][j] = min(b[i][j-1], b[i+(1 << (j-1))][j-1]);
for(int i = 1; i <= m; i++)
{
ka >> x >> y;
ki << min(b[x][v[y-x]], b[y - (1 << v[y-x]) +1][v[y-x]]) << '\n';
}
}