Pagini recente » Cod sursa (job #2502508) | Cod sursa (job #3136767) | Cod sursa (job #2592474) | Cod sursa (job #2451223) | Cod sursa (job #532106)
Cod sursa(job #532106)
#include <fstream>
using namespace std;
#define NMAX 100001
#define LOGMAXN 17
int N, M, A[NMAX], mins[LOGMAXN][NMAX];
ifstream f("rmq.in"); ofstream g("rmq.out");
void preprocesare() {
for (int i=1;i<=N;i++) mins[0][i] = i;
for (int j=1;1<<j<=N;j++)
for (int i=1;i+(1<<j)-1<=N;i++)
if (A[mins[j-1][i]] < A[mins[j-1][i+(1<<(j-1))]])
mins[j][i] = mins[j-1][i];
else mins[j][i] = mins[j-1][i+(1<<(j-1))];
}
int main() {
int i,j,k,x,dif;
f>>N>>M;
for (i=1;i<=N;i++) f>>A[i];
preprocesare();
for (x=1;x<=M;x++) {
f>>i>>j;
dif = j-i+1, k=0;
for (k=0;dif;dif>>=1,k++); k--;
if (A[mins[k][i]]<A[mins[k][j-(1<<k)+1]]) g<<A[mins[k][i]]<<"\n";
else g<<A[mins[k][j-(1<<k)+1]]<<"\n";
}
f.close(); g.close(); return 0;
}