Pagini recente » Cod sursa (job #3268744) | Cod sursa (job #1070277) | Cod sursa (job #2767716) | Cod sursa (job #1286297) | Cod sursa (job #2416429)
#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();
for(int i=0; i<n; i++){
for(int j=0; j<4; j++)
cout<<ma[i][j]<<' ';
cout<<'\n';
}
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;
}