Pagini recente » Cod sursa (job #426014) | Cod sursa (job #2076105) | Cod sursa (job #2546163) | Istoria paginii runda/baraj2017/clasament | Cod sursa (job #334727)
Cod sursa(job #334727)
#include <iostream>
#include <fstream>
#define NMAX 100002
#define LMAX 18
using namespace std;
long lg[NMAX],n,m,a[NMAX],x,y;
class rmq{
long t[LMAX][NMAX];
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; j++){
t[i][j]=min(t[i-1][j],t[i-1][j+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(){
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
fin >> n >> m;
for (long i=1; i<=n; i++)
fin >> a[i];
int lg[NMAX];
for (long i=1; i<=n; i++){
lg[i]=lg[i/2]+1;
}
rmq seq(a);
for (long l=1; l<=m; l++){
fin >> x >> y;
fout << seq.minim(x,y) << "\n";
}
fin.close();
fout.close();
}