Pagini recente » Cod sursa (job #1941471) | Cod sursa (job #841307) | Cod sursa (job #1808217) | Cod sursa (job #235094) | Cod sursa (job #1298508)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, rmq[2][100003], v[100003],sol[100010], i, a[100003], l, x, y, m, mlc, MLC, mLc, MlC, MLc, mlC, mLC;
struct asd
{
int x,y,r;
}e[100010];
bool crit(asd a,asd b)
{
return (a.y-a.x)>(b.y-b.x);
}
inline void run(int N)
{
int l, r, i, lg, LG;
for(i = 1; i <= n; i++)
rmq[0][i] = v[i];
for(lg = 1, LG = 2, m = 1; LG <= N; LG <<= 1, lg <<= 1, m = 1 - m)
for(l = 1, r = LG; r <= n; l++, r++)
rmq[m][l] = min(rmq[1 - m][l], rmq[1 - m][l + lg]);
}
int main()
{
fin >> n >> q;
for(i = 2; i <= n; i <<= 1)
a[i] = 1;
for(i = 1; i <= n; i++)
a[i] += a[i - 1];
for(i = 1; i <= n; i++)
fin >> v[i];
l = 1 << 30;
for(i=1;i<=q;i++)
{
fin>>x>>y;
e[i].x=x;
e[i].y=y;
e[i].r=i;
}
sort(e+1,e+q+1,crit);
for(i=1;i<=q;i++)
{
//fin >> x >> y;
x=e[i].x;
y=e[i].y;
if(a[y - x + 1 ] < l)
{
l = a[y - x + 1];
run(1 << (l+1));
}
sol[e[i].r]=min(rmq[m][x], rmq[m][y - (1 << (l)) + 1]);
}
for(i=1;i<=q;i++)
fout<<sol[i]<<'\n';
return 0;
}