Pagini recente » Cod sursa (job #782457) | Cod sursa (job #2491764) | Cod sursa (job #405031) | Cod sursa (job #1410116) | Cod sursa (job #334739)
Cod sursa(job #334739)
#include <iostream>
#include <fstream>
#define NMAX 100002
#define LMAX 18
using namespace std;
long lg[NMAX],n,m,a[NMAX],x,y, t[LMAX][NMAX];
class rmq{
public:
rmq(long* a);
long minim(long &x, long &y);
};
rmq::rmq(long* a){
for (long j=1; j<=n; j++){
t[0][j]=a[j];
}
for (long i=1; (1 << i )<=n; i++){
for (long j=1; j<=n-(1<<i)+1; j++){
t[i][j]=min(t[i-1][j],t[i-1][j+(1<<(i-1))]);
}
}
}
long rmq::minim(long &x, long &y){
long k=(y-x+1)-(1<<lg[y-x+1]);
return min(t[lg[y-x+1]][x],t[lg[y-x+1]][x+k]);
}
int main () {
x=1;
y=1;
x=y;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
fin >> n >> m;
for (long i=1; i<=n; i++)
fin >> a[i];
lg[1]=0;
for (long i=2; i<=n; i++){
lg[i]=lg[i/2]+1;
}
rmq seq(a);
for (long p=1; p<=m; p++){
fin >> x >> y;
fout << seq.minim(x,y) << "\n";
}
fin.close();
fout.close();
return 0;
}