Pagini recente » Cod sursa (job #1762165) | Cod sursa (job #752336) | Cod sursa (job #1928010) | Cod sursa (job #2419660) | Cod sursa (job #2570212)
#include <iostream>
#include <fstream>
#define NMAX 100000
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, q, rmq[NMAX+10][20], log2[NMAX+10];
void precalc()
{ log2[1] = 0;
for(int i=2; i<=NMAX; i++)
{ log2[i] = log2[i-1];
if((i & (i-1)) == 0) log2[i]++;
}
}
int main()
{
precalc();
f >> n >> q;
for(int i=1; i<=n; i++) f >> rmq[i][0];
for(int j=1; (1<<j)<=n; j++)
for(int i=1; i<=n-(1<<j)+1; i++)
rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
while(q--)
{ int a, b;
f >> a >> b;
int l = log2[b-a+1];
g << min(rmq[a][l], rmq[b-(1<<l)+1][l]) << '\n';
}
return 0;
}