Pagini recente » Cod sursa (job #1456537) | Cod sursa (job #14025) | Cod sursa (job #2063009) | Cod sursa (job #2305055) | Cod sursa (job #2416431)
#include <fstream>
using namespace std;
#define maxn 100005
int n,m, a[maxn], ma[maxn][18],lg[maxn],diff,x,y,l,s;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
void lg_create(){
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
}
void rmq(){
for(int i=0; i<n; i++)
ma[i][0]=i;
for(int j=1; (1<<j)<=n; j++)
for(int i=0; i+(1<<j)-1<n; i++)
if(a[ma[i][j-1]]<a[ma[i + (1 << (j - 1))][j-1]])
ma[i][j]=ma[i][j-1];
else
ma[i][j]=ma[i + (1 << (j - 1))][j-1];
}
int main()
{
cin>>n>>m;
for(int i=0; i<n; i++)
cin>>a[i];
rmq();
lg_create();
while(m){
m--;
cin>>x>>y;
x--;y--;
diff=y-x+1;
l=lg[diff];
cout<<min(a[ma[x][l]],a[ma[x+diff-(1<<l)][l]])<<'\n';
}
return 0;
}