Pagini recente » Cod sursa (job #2487339) | Cod sursa (job #1972891) | Istoria paginii runda/oji201711-12 | Cod sursa (job #2833178) | Cod sursa (job #578066)
Cod sursa(job #578066)
#include <fstream>
using namespace std;
const int N=100002,M=18,inf=1<<30;
int v[N],a[N][M],n;
ifstream in("rmq.in");
ofstream out("rmq.out");
void RMQ()
{
int i,j,k;
for (i=0;i<N;i++)
for (j=0;j<M;j++)
a[i][j]=inf;
for (i=n;i;i--)
{
a[i][0]=v[i];
for (j=1,k=2;i+k<=n;j++,k<<=1)
a[i][j]=min(a[i][j-1],a[i+k][j-1]);
}
}
int query(int x,int y)
{
if (!y)
return inf;
int p,q;
for (p=0,q=1;q<=y;p++,q<<=1);
q>>=1;p--;
return min(a[x][p],query(x+q,y-q));
}
int main()
{
int t,i,x,y;
in>>n>>t;
for (i=1;i<=n;i++)
in>>v[i];
RMQ();
while (t--)
{
in>>x>>y;
out<<query(x,y-x+1)<<"\n";
}
return 0;
}