Pagini recente » Cod sursa (job #839106) | Cod sursa (job #3226090) | Cod sursa (job #2402927) | Cod sursa (job #2860561) | Cod sursa (job #1765435)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[100100],rmq[20][100100],i,j,n,m,l,r;
int main()
{
fin >>n>>m;
for(i=0;i<n;i++) fin >>a[i];
for(i=0;i<n;i++){
rmq[i][0]=i;
}
for(j=1;int(pow(2,j))<=n;j++){
for(i=0;i+int(pow(2,j))-1<n;i++){
if (a[rmq[i][j-1]]<a[rmq[i+int((2,j-1))][j-1]]) rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+int(pow(2,j-1))][j-1];
}
}
/* for(i=0;i<=5;i++) {
for(j=0;j<=5;j++) fout <<rmq[i][j]<<" ";
fout <<endl;
}
*/
for(i=1;i<=m;i++){
fin >>l>>r;
l--;
r--;
int k=int(log(r-l+1));
fout <<min(a[rmq[l][k]],a[rmq[l+r-l+1-int(pow(2,k))][k]])<<endl;
}
return 0;
}