Pagini recente » Cod sursa (job #2520996) | Cod sursa (job #379781) | Cod sursa (job #1450694) | Cod sursa (job #3144581) | Cod sursa (job #1650904)
#include <fstream>
#include <algorithm>
using namespace std;
FILE * fin=fopen("rmq.in", "r");
FILE * fout=fopen ("rmq.out", "w");
int n, m;
int A[100009], logaritm[100009];
int M[100009][20];
void citire();
void intializare();
void logaritimi ();
int RMQ (int x, int y);
int main()
{
citire();
return 0;
}
void citire()
{
int i, x, y;
fscanf(fin, "%d %d\n", &n, &m);
for(i=1; i<=n; ++i)
fscanf(fin, "%d", &A[i]);
intializare();
logaritimi ();
for(i=1; i<=m; ++i)
{
fscanf(fin, "%d %d\n", &x, &y);
fprintf(fout, "%d\n", RMQ(x, y) );
}
}
void logaritimi ()
{
int i;
for(i=2; i<=n; ++i)
logaritm[i]=logaritm[i/2]+1;
}
void intializare()
{
int i, j;
for(i=1; i<=n; ++i)
M[i][0]=A[i];
for(j=1; (1<<j)<=n; ++j)
for(i=1; i+(1<<(j-1))<=n; ++i)
M[i][j]=min(M[i][j-1], M[i+(1<<(j-1))][j-1]);
}
int RMQ (int x, int y)
{
int k=logaritm[y-x+1];
return min(M[x][k], M[y-(1<<k)+1][k] );
}