Pagini recente » Cod sursa (job #1267027) | Cod sursa (job #2684896) | Cod sursa (job #412283) | Cod sursa (job #68738) | Cod sursa (job #2211793)
#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[i][0] = v[i];
for(int i = 1; (1 << i) <= n; ++i)
for(int j = 1; j <= n - (1 << i) + 1; ++j)
rmq[j][i] = (rmq[j][i - 1] < rmq[j + (1 << (i - 1))][i - 1])?rmq[j][i - 1]:rmq[j + (1 << (i - 1))][i - 1];
for(int i = 1; i <= m; ++i)
{
fCin >> startx >> finalx;
int lungime = logx[finalx - startx + 1];
(rmq[startx][lungime] < rmq[finalx - (1 << lungime) + 1][lungime])?fCout << rmq[startx][lungime] << '\n':fCout << rmq[finalx - (1 << lungime) + 1][lungime] << '\n';
}
return 0;
}