Pagini recente » Cod sursa (job #1362135) | Cod sursa (job #1812580) | Cod sursa (job #1039607) | Cod sursa (job #2126919) | Cod sursa (job #2455694)
#include <fstream>
#define MaxN 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int v[MaxN], n, m, k, p, i, j, a, b, M[MaxN][20], log[MaxN], Min;
int main()
{ f >> n >> m;
for(i = 1; i <= n; i++){
f >> v[i];
M[i][0] = i;
}
for(i = 0; (1 << i) <= n; i++)
log[(1 << i)] = i;
for(i = 1; i <= n; i++)
if(log[i] == 0)
log[i] = log[i - 1];
for(j = 1; (1 << j) <= n; j++){
for(i = 1; i + (1 << j) - 1 <= n; i++){
if(v[M[i][j - 1]] < v[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];
}
}
for(i = 1; i <= m; i++){
f >> a >> b;
Min = MaxN;
while(a <= b){
k = log[b - a + 1];
Min = min(Min, v[M[a][k]]);
a = a + (1 << k);
}
g << Min << '\n';
}
return 0;
}