Cod sursa(job #2543730)
Utilizator | Data | 11 februarie 2020 14:32:31 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.6 kb |
#include <fstream>
#define DIM 100010
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int v[DIM], d[20][DIM], p2[DIM];
int n, m, i, j, st, dr;
int main()
{
for ( i = 2; i <= DIM; i++ )
p2[i] = 1+p2[i/2];
f>>n>>m;
for( i = 1; i <= n; i++ )
f>>d[0][i];
for ( i = 1; (1<<i) <= n; i++ )
for ( j = 1; j <= n; j++ )
d[i][j] = min ( d[i-1][j], d[i-1][ min(n, j+(1<<(i-1)) ) ] );
for ( ; m--; ){
f>>st>>dr;
i = p2[dr-st+1];
g<<min ( d[i][st], d[i][dr-(1<<i)+1] )<<"\n";
}
return 0;
}