Pagini recente » Cod sursa (job #1847036) | Cod sursa (job #1119348) | Cod sursa (job #1272185) | Cod sursa (job #2643524) | Cod sursa (job #613995)
Cod sursa(job #613995)
#include <cstdio>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 100001
int rmq[18][N],lg[N];
int main ()
{
int n,q,i,j;
ifstream in ("rmq.in");
in>>n>>q;
for(i=1;i<=n;++i)
in>>rmq[0][i];
for(i=2;i<=n;++i)
lg[i]=lg[i>>1]+1;
++n;
for(j=1;(1<<j)<=n;++j)
for(i=1;i+(1<<j)<=n;++i){
rmq[j][i]=rmq[j-1][i];
if(i+(1<<(j-1))<n&&rmq[j-1][i+(1<<(j-1))]<rmq[j][i])
rmq[j][i]=rmq[j-1][i+(1<<(j-1))];
}
freopen ("rmq.out","w",stdout);
for(;q;--q){
in>>i>>j;
if(j==i)
printf("%d\n",rmq[0][i]);
else
if(rmq[lg[j-i]][i]<rmq[lg[j-i]][j-(1<<lg[j-i])+1])
printf("%d\n",rmq[lg[j-i]][i]);
else
printf("%d\n",rmq[lg[j-i]][j-(1<<lg[j-i])+1]);
}
return 0;}