Pagini recente » Cod sursa (job #2552264) | Cod sursa (job #94900) | Cod sursa (job #696964) | Cod sursa (job #835206) | Cod sursa (job #1875772)
#include<fstream>
#define MAX 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, lg[MAX], v[20][MAX], i, j, k, a[MAX], l;
int main()
{
fin>>n>>m;
for (i = 0; i < n; i++)
{
fin>>a[i];
v[0][i] = a[i];
}
lg[1] = 0;
for (i = 2; i <=n; i++)
lg[i] = lg[i/2] + 1;
//preprocesare
for (j = 1; (1 << j) <= n; j++)
{
i = 0;l = 1 << (j-1);
while(i + 2 * l <= n)
{
if (v[j - 1][i] < v[j - 1][i + l]) v[j][i] = v[j - 1][i];
else v[j][i] = v[j - 1][i + l];
i++;
}
}
for (i = 1; i <= m; i++)
{
fin>>j>>k;
j--;k--;
l = lg[k - j + 1];
if (v[l][j] < v[l][k - (1 << l) + 1]) fout<<v[l][j]<<'\n';
else fout<<v[l][k - (1 << l) + 1]<<'\n';
}
return 0;
}