Pagini recente » Cod sursa (job #1602189) | Cod sursa (job #2901732) | Cod sursa (job #2029695) | Cod sursa (job #1122026) | Cod sursa (job #2601019)
#include<fstream>
#include<deque>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q,a,b,i,v[1000001];
int mat[18][100001],minim;
deque<int>dq;
int main()
{
fin>>n>>q;
for(i=1; i<=n; i++)
fin>>v[i];
for(i=0; i<=17; i++)
{
int p=(1<<i);
for(int j=1; j<=n; j++)
{
while(!dq.empty()&&dq.front()<j-p)
dq.pop_front();
while(!dq.empty()&&v[dq.back()]>=v[j])
dq.pop_back();
dq.push_back(j);
if(j-p>=1)
mat[i][j-p]=v[dq.front()];
}
}
for(i=1; i<=q; i++)
{
fin>>a>>b;
int dif=b-a,p=0;
minim=v[a];
while(dif)
{
if(dif%2==1)
{
minim=min(minim,mat[p][a]);
a+=(1<<p);
}
p++;
dif>>=1;
}
fout<<minim<<"\n";
}
}