Pagini recente » Cod sursa (job #62578) | Cod sursa (job #2396513) | Cod sursa (job #2397104) | Cod sursa (job #335460) | Cod sursa (job #2450378)
#include <fstream>
#include <iostream>
#define NMAX 100000
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, v[NMAX+10], log2[NMAX+10], a[NMAX+10][20];
void preCalc()
{
log2[1] = 0;
for(int i=2; i<=n; i++) log2[i] = 1 + log2[i/2];
}
int main()
{
f >> n >> m;
preCalc();
for(int i=1; i<=n; i++) f >> v[i], a[i][0] = v[i];
for(int j=1; (1<<j)<=n; j++)
{ for(int i=1; i<=n-(1<<j)+1; i++)
a[i][j] = min(a[i][j-1], a[i+(1<<(j-1))][j-1]);
}
while(m--)
{ int p1, p2;
f >> p1 >> p2;
int k = log2[p2-p1+1];
g << min(a[p1][k], a[p2-(1<<k)+1][k]) << '\n';
}
return 0;
}