Pagini recente » Cod sursa (job #1936952) | Cod sursa (job #2275172) | Cod sursa (job #279618) | Cod sursa (job #1876240) | Cod sursa (job #3343759)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[22][100009];
int lg[100009], p2[22];
int query (int x, int y)
{
int l=y-x+1;
l=lg[l];
return min (rmq[l][x], rmq[l][y-p2[l]+1]);
}
signed main ()
{
int n, q;
f >> n >> q;
lg[1]=0;
int p=1;
int curr=0;
for (int i=2; i<=n; i++)
{
while (2*p<=i)
{
p*=2;
curr++;
}
lg[i]=curr;
}
p2[0]=1;
for (int i=1; i<=20; i++)
p2[i]=2*p2[i-1];
for (int i=1; i<=n; i++)
f >> rmq[0][i];
for (int i=1; p2[i]<=n; i++)
{
for (int j=1; p2[i]+j-1<=n; j++)
{
rmq[i][j]=min (rmq[i-1][j], rmq[i-1][j+p2[i-1]]);
}
}
while (q--)
{
int x, y;
f >> x >> y;
g << query (x, y)<<'\n';
}
}