Pagini recente » Cod sursa (job #154757) | Cod sursa (job #867675) | Cod sursa (job #1284653) | Cod sursa (job #724947) | Cod sursa (job #2760213)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, t;
int v[100100][22];
int logaritm[100100];
void precalc()
{
logaritm[1] = 0;
int i, j, p2;
for(i = 2; i <= 100050; i ++)
{
logaritm[i] = logaritm[i / 2] + 1;
}
for(i = 1; i <= 20; i ++)
{
p2 = 1 << i;//2 la i
for (j = 1; j + p2 - 1 <= n; j ++)
{
v[j][i] = min(v[j][i-1], v[j + p2 / 2][i-1]);
}
}
}
int rmq(int st, int dr)
{
int lg = dr - st + 1;
int logg = logaritm[lg];
return min(v[st][logg], v[dr - (1<<logg) + 1][logg]);
}
int main()
{
fin >> n >> t;
int i, st, dr;
for(i = 1; i <= n; i ++)
{
fin >> v[i][0];
}
precalc();
while(t)
{
t--;
fin >> st >> dr;
fout << rmq(st,dr) << '\n';
}
return 0;
}