Pagini recente » Cod sursa (job #1446153) | Cod sursa (job #1196953) | Cod sursa (job #2055451) | Cod sursa (job #527840) | Cod sursa (job #1862166)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
unsigned int N, M;
unsigned int A[100001];
unsigned int x, y;
unsigned int RMQ[18][100001];
unsigned int log[100001];
unsigned int range, lg, diff;
unsigned int i, j;
unsigned int sol;
int main ()
{
fin >> N >> M;
for (i=1; i<=N; i++)
fin >> A[i];
for (i=2; i<=N; i++)
log[i] = log[i/2] + 1; /// log[i] - cum se scrie i ca 2 la o anumita putere
for (i=1; i<=N; i++)
RMQ[0][i] = A[i];
for (i=1; (1<<i)<=N; i++)
for (j=1; j<=N-(1<<i)+1; j++)
RMQ[i][j] = min(RMQ[i-1][j],RMQ[i-1][j+1]);
for (i=1; i<=M; i++)
{
fin >> x >> y;
range = y - x + 1;
lg = log[range];
diff = range - (1<<lg);
sol = min(RMQ[lg][x],RMQ[lg][x+diff]);
fout << sol << '\n';
}
return 0;
}