Pagini recente » Cod sursa (job #1248595) | Cod sursa (job #2080209) | Cod sursa (job #949128) | Cod sursa (job #880771) | Cod sursa (job #2515024)
#include <bits/stdc++.h>
using namespace std;
int n,m,v[100005],rmq[20][100005],st,dr,lg[100005];
void build_rmq () {
for(int i=1;i<=n;++i)
rmq[0][i]=v[i];
for(int j=1;(1<<j)<=n;++j)
for(int i=1;i+(1<<j)-1<=n;++i)
rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
}
int querrys (int st,int dr) {
return min(rmq[lg[dr-st+1]][st],rmq[lg[dr-st+1]][1+dr-(1<<lg[dr-st+1])]);
}
int main () {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
//rmq[i][j]=min pe interval de putere 2,j care incepe in i;
//i,j este intervalul i,i+(1<<j)-1;
scanf("%d%d", &n, &m);++m;
for(int i=1;i<=n;++i)
scanf("%d", &v[i]);
for(int i=2;i<=n;++i)
lg[i]=lg[(i>>1)]+1;
build_rmq();
while(--m) {
scanf("%d%d", &st, &dr);
printf("%d\n", querrys(st,dr));
}
/*for(int i=0;i<=lg[n];++i,printf("\n"))
for(int j=1;j<=n;++j)
printf("%d ", rmq[i][j]);*/
return 0;
}