Pagini recente » Cod sursa (job #1388452) | Cod sursa (job #2726771) | Cod sursa (job #2294669) | Cod sursa (job #2843402) | Cod sursa (job #2540842)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, m, st, dr, ii;
int d[20][100010], lg[100010];
int main (){
fin>>n>>m;
for(int i=1; i<=n; i++)
fin>>d[0][i];
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for(int e=1; (1<<e)<=n; e++)
for(int i=1; i<=n; i++){
d[e][i]=d[e-1][i];
ii=i+(1<<(e-1));
if(ii <= n && d[e][i] > d[e-1][ii])
d[e][i]=d[e-1][ii];
}
for(int i=1; i<=m; i++){
fin>>st>>dr;
ii=lg[dr-st+1];
dr=dr-(1<<ii)+1;
fout<<min(d[ii][st], d[ii][dr])<<"\n";
}
return 0;
}