Pagini recente » Diferente pentru utilizator/cristiprg intre reviziile 6 si 7 | Borderou de evaluare (job #2388642) | Cod sursa (job #929581)
Cod sursa(job #929581)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rmq.in"); ofstream fout("rmq.out");
#define NMAX 100002
#define LMAX 18
int rmq[LMAX][NMAX], n, m, lg[NMAX];
int main()
{
int l;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> rmq[0][i];
if(i > 1)
lg[i] = lg[i / 2] + 1;
}
for(int i = 1; (1<<i) <= n; i++)
for (int j = 1; j <= n - (1<<i) + 1; j++)
{
l = 1<<(i - 1);
rmq[i][j] = min( rmq[i - 1][j] , rmq[i - 1][j + l]);
}
int x, y, diff, sh;
for(int i = 1; i <= m; i++)
{
fin >> x >> y;
diff = y - x + 1;
l = lg[diff];
sh = diff - (1<<l);
fout << min(rmq[l][x], rmq[l][x + sh]) << "\n";
}
fin.close(); fout.close();
return 0;
}