Pagini recente » Cod sursa (job #589159) | Cod sursa (job #1919754) | Cod sursa (job #800243) | Cod sursa (job #923273) | Cod sursa (job #3254565)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100000;
const int LG = log2(NMAX);
int n, m, st, dr;
int v[NMAX+1];
int rmq[NMAX+1][LG];
int E[NMAX+1];
int main()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
fin >> v[i], rmq[i][0] = v[i];
for(int lg=1; lg<=LG; lg++)
{
for(int i=1; i+(1<<(lg-1))<=n; i++)
{
rmq[i][lg] = min(rmq[i][lg-1],rmq[i+(1<<(lg-1))][lg-1]);
}
}
E[1] = 0;
for(int i=2; i<=n; i++)
E[i] = E[i/2]+1;
for(int i=1; i<=m; i++)
{
fin >> st >> dr;
int e = E[dr-st+1];
int d = (1<<e);
fout << min(rmq[st][e],rmq[dr-d+1][e]) << '\n';
}
return 0;
}