Pagini recente » Cod sursa (job #1005468) | Cod sursa (job #1325540) | Cod sursa (job #1206043) | Istoria paginii runda/time_ | Cod sursa (job #2485940)
#include <fstream>
using namespace std;
ifstream fCin("rmq.in"); ofstream fCout("rmq.out");
int v[100001], logx[100001], rmq[100001][30];
int main()
{ int n, m, startx, finalx;
fCin >> n >> m;
for(int i = 1; i <= n; ++i) fCin >> v[i];
for(int i = 2; i <= n; ++i) logx[i] = logx[i >> 1] + 1;
for(int i = 1; i <= n; ++i) rmq[0][i] = v[i];
for(int i = 1; (1 << i) <= n; ++i)
for(int j = 1; j <= n - (1 << i) + 1; ++j)
rmq[i][j] = (rmq[i - 1][j] < rmq[i - 1][j + (1 << (i - 1))])?rmq[i - 1][j]:rmq[i - 1][j + (1 << (i - 1))];
for(int i = 1; i <= m; ++i)
{
fCin >> startx >> finalx;
int lungime = logx[finalx - startx + 1];
(rmq[lungime][startx] < rmq[lungime][finalx - (1 << lungime) + 1])?fCout << rmq[lungime][startx] << '\n':fCout << rmq[lungime][finalx - (1 << lungime) + 1] << '\n';
}
return 0;
}