Pagini recente » Cod sursa (job #2866710) | Cod sursa (job #3123537) | Cod sursa (job #1367199) | Cod sursa (job #922633) | Cod sursa (job #575288)
Cod sursa(job #575288)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,a[100015],rmq[20][100015],k,i,j,x,y,p;
void preg_rmq() {
for(i=0;i<n;i++) {
rmq[0][i]=a[i];
}
for(j=1; (1<<j)<=n;j++) {
for(i=0;i+ (1<<j)-1<n;i++) {
rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
}
}
}
inline int query(int x, int y) {
int aux=y-x+1;
k=0;
while (aux>0) {
k++;
aux>>=1;
}
return min(rmq[k][y- (1<<k) +1],rmq[k][x]);
}
int main()
{
fin>>n>>m;
for(i=0;i<n;i++) {
fin>>a[i];
}
preg_rmq();
for(i=1;i<=m;i++) {
fin>>x>>y;
fout<<query(x-1,y-1)<<"\n";
}
fout.close();
return 0;
}