Pagini recente » Cod sursa (job #1503269) | Cod sursa (job #1045917) | Cod sursa (job #574084) | Cod sursa (job #541176) | Cod sursa (job #2278042)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int T[25][100005];
int main()
{
int n, m, i, j, k, a, b, d, l = 0, r = 31, mij;
fin >> n >> m; k = j = 1;
for(i = 1; i <= n; i++) fin >> T[0][i];
while(k <= n){
for(i = 1; i <= n; i++){
if(T[j - 1][i + k] == 0){T[j][i] = T[j - 1][i]; continue;}
T[j][i] = min(T[j - 1][i], T[j - 1][i + k]);
}
j++, k *= 2;
}
for(i = 1; i <= m; i++){
fin >> a >> b; d = b - a + 1;
n = d;l = 0; r = 31;
while(l < r){
mij = (l + r) >> 1;
if(n >> mij == 1) break;
if(n >> mij == 0) r = mij;
else l = mij;
}
fout << min(T[mij][a], T[mij][a + (d - (1 << mij))]) << "\n";
}
return 0;
}