Pagini recente » Cod sursa (job #1626745) | Cod sursa (job #321744) | Cod sursa (job #1626112) | Cod sursa (job #1792604) | Cod sursa (job #2284657)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int RMQ[20][100001], n, m;
int minInterval(int x, int y)
{
int c = 1, p = 0, fin=y-x;
while(c <= fin) c*=2, p++;
p--, c/=2;
return min(RMQ[p][x], RMQ[p][y-c+1]);
}
void createRmq()
{
bool OK = true;
for(int i = 1; i <= n && OK; i++)
for(int j = 1; j <= m && OK; j++){
int d = j+pow(2.00, i);
if(d > n+1){
OK = false;
break;
}
RMQ[i][j]=minInterval(j, d-1);
}
}
int main()
{
int x, y;
f >> n >> m;
for(int i = 1; i <= n; i++)
f >> RMQ[0][i];
createRmq();
for(int i = 1; i <= m; i++){
f >> x >> y;
g << minInterval(x, y) << "\n";
}
return 0;
}