Pagini recente » Cod sursa (job #1820490) | Cod sursa (job #2941223) | Cod sursa (job #2770782) | Cod sursa (job #475523) | Cod sursa (job #3272141)
#include <fstream>
#include <algorithm>
#define dim 100000
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
struct query
{
int l,r,pos;
};
query qry[10*dim+1];
int v[dim+1],stiva[dim+1],n,q,k,sol[10*dim+1];
bool cmp (query a,query b)
{
return a.r<b.r;
}
int cb (int x)
{
int l=1,r=k,mid;
while (l<=r)
{
mid=(l+r)/2;
if (stiva[mid]<x)
l=mid+1;
else
r=mid-1;
}
return v[stiva[l]];
}
int main()
{
fin>>n>>q;
for (int i=1; i<=n; i++)
fin>>v[i];
for (int i=1; i<=q; i++)
{
fin>>qry[i].l>>qry[i].r;
qry[i].pos=i;
}
sort (qry+1,qry+q+1,cmp);
int j=0;
for (int i=1; i<=q; i++)
{
while (j<qry[i].r)
{
j++;
while (k>0&&v[stiva[k]]>=v[j])
k--;
stiva[++k]=j;
}
sol[qry[i].pos]=cb (qry[i].l);
}
for (int i=1; i<=q; i++)
fout<<sol[i]<<"\n";
return 0;
}