Pagini recente » Monitorul de evaluare | Diferente pentru problema/text2 intre reviziile 2 si 1 | Cod sursa (job #420147) | Cod sursa (job #2218136) | Cod sursa (job #3340262)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int r[20][100005], lg[100005];
int main()
{
int n, m, st, dr;
in>>n>>m;
for(int i=1;i<=n;i++){
in>>r[0][i];
if(i>1)
lg[i] = 1+ lg[i/2];
}
for(int p=1;p<=lg[n];p++){
for(int j=(1<<p);j<=n;j++){
r[p][j] = min(r[p-1][j], r[p-1][j-(1<<(p-1))]);
}
}
while(m--){
in>>st>>dr;
int len = lg[dr-st+1];
out<<min(r[len][dr], r[len][st+(1<<len)-1])<<"\n";
}
return 0;
}