Pagini recente » Cod sursa (job #1597433) | Cod sursa (job #72611) | Cod sursa (job #1872889) | Cod sursa (job #550160) | Cod sursa (job #2718324)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,v[100005],rmq[100005][18],lg[100005];
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++) f>>v[i];
lg[1]=0;
for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1,rmq[i][0]=v[i];
rmq[1][0]=v[1];
for(int i=1;i<=lg[n];i++)
{
for(int j=1;j+(1<<i)-1<=n;j++)
{
rmq[j][i]=min( rmq[j][i-1],rmq[j + (1<<(i-1))][i-1] ) ;
}
}
for(int i=1;i<=m;i++)
{
int a,b;
f>>a>>b;
if(b<a) swap(a,b);
int lung=b-a+1;
int putere=lg[lung];
int sol=rmq[a][putere];
sol=min( sol , rmq[a+( lung-(1<<putere) )][putere] );
g<<sol<<'\n';
}
}