Pagini recente » Cod sursa (job #2961820) | Cod sursa (job #2577202) | Cod sursa (job #940623) | Cod sursa (job #1697765) | Cod sursa (job #2755179)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int RMQ[100][100001];
int n,q,x,y,i,j,p;
void processRMQ(){
for( i = 1; i <= n;i++)
fin>>RMQ[0][i]; //initializam prima linie a matricei cu elem din vector
for( i = 1, p = 2;p <= n; i++, p *= 2) // in continuare calculam minimul pe intervale din ce in ce mai mari
for( j =1; j<= n; j++)
RMQ[i][j] = min(RMQ[i-1][j],RMQ[i-1][j+p/2]);
}
int Query(int x, int y){
int p = 1;
int i = 0;
while(p*2 <= y - x + 1){
p *= 2;
i ++;
}
return min(RMQ[i][x],RMQ[i][y-p+1]);
}
int main()
{
fin>>n>>q;
processRMQ();
for ( i=1; i<=q; i++){
fin>>x>>y;
fout<<Query(x,y)<<"\n";
}
fin.close();
fout.close();
return 0;
}