Pagini recente » Cod sursa (job #1657790) | Cod sursa (job #362437) | Cod sursa (job #2066396) | Cod sursa (job #30675) | Cod sursa (job #2564591)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[nmax][20], numere[nmax], n, m, logn;
void sparse()
{
int i, j, z, t;
for(j = 1; j <= logn; j++)
{
t = (1 << j), z = (1 << (j - 1));
for(i = 0; i + t <= n; i++)
(numere[rmq[i][j - 1]] < numere[rmq[i + z][j - 1]]) ? (rmq[i][j] = rmq[i][j - 1]) : (rmq[i][j] = rmq[i + z][j-1]);
}
}
int get_lg(int nbr)
{
int ans = 0;
while(nbr > 1)
nbr = (nbr >> 1), ans++;
return ans;
}
int main()
{
int i, x, y, k;
fin >> n >> m;
logn = get_lg(n);
for(i = 0; i < n; i++)
fin >> numere[i], rmq[i][0] = i;
sparse();
for(i = 0; i < m; i++)
{
fin >> x >> y;
k = get_lg(y - x);
(numere[rmq[x - 1][k]] < numere[rmq[y - (1<<k)][k]]) ? (fout << numere[rmq[x - 1][k]] << '\n') : (fout << numere[rmq[y - (1<<k)][k]] << '\n');
}
return 0;
}