Mai intai trebuie sa te autentifici.
Cod sursa(job #1664833)
Utilizator | Data | 26 martie 2016 14:43:08 | |
---|---|---|---|
Problema | Range minimum query | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.8 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100003;
const int M = 1000003;
int n, m;
int r[N][16], log[N];
int min( int x, int y )
{
if ( x < y )
return x;
return y;
}
int main()
{
int i, j, k, a, b;
in >> n >> m;
log[1] = 0;
for ( i = 2; i <= n; i++ )
log[i] = log[i/2]+1;
for ( i = 1; i <= n; i++ )
{
in >> r[i][0];
for ( j = 1; (1<<j) <= i; j++ )
{
k = i-(1<<(j-1));
r[i][j] = min(r[i][ j-1 ], r[k][ j-1 ] );
}
}
for ( i = 1; i <= m; i++ )
{
in >> a >> b;
out << min( r[b][log[b-a+1] ], r[a+(1<<log[b-a+1]) -1][log[b-a+1] ] )<<'\n';
}
return 0;
}