Pagini recente » Cod sursa (job #1462364) | Cod sursa (job #594556) | Cod sursa (job #1127656) | Cod sursa (job #3169849) | Cod sursa (job #573630)
Cod sursa(job #573630)
#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]=i;
}
for(j=1; (1<<j)<=n;j++) {
for(i=0;i+ (1<<j)-1<n;i++) {
cout<<"rmq["<<j<<"]["<<i<<"] dintre rmq["<<j-1<<"]["<<i<<"] ("<<a[rmq[j-1][i]]<<") si rmq[";
cout<<j-1<<"]["<<i+(1<<(j-1))<<"] ("<<a[rmq[j-1][i+(1<<(j-1))]]<<")\n";
if ( a[ rmq[j-1][i] ] < a[ rmq[j-1][i+(1<<(j-1))] ] )
rmq[j][i]=rmq[j-1][i];
else
rmq[j][i]=rmq[j-1][i+(1<<(j-1))];
}
}
}
int query(int x, int y) {
k=(int) (log(y-x+1)/log(2));
if (a[ rmq[k][x] ] <= a[ rmq[k][y- (1<<k) +1] ]) return rmq[k][x];
return rmq[k][y- (1<<k) +1];
}
int main()
{
fin>>n>>m;
for(i=0;i<n;i++) {
fin>>a[i];
}
preg_rmq();
for(j=0;j<8;j++) {
cout<<"\n";
for(i=0;i<n;i++) {
cout<<a[rmq[j][i]]<<" ";
}
}
for(i=1;i<=m;i++) {
fin>>x>>y;
fout<<a[query(x-1,y-1)]<<"\n";
}
fout.close();
return 0;
}