Pagini recente » Cod sursa (job #679808) | Cod sursa (job #2537169) | Cod sursa (job #2604205) | Cod sursa (job #2092926) | Cod sursa (job #2977711)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int v[100002],mat[100002][22],n,m;
void constr(int k)
{
for(int i=0;i<k;i++)
mat[i][0]=i;
for(int j=1;(1<<j)<=k;j++)
{
for(int i=0;(i+(1<<j)-1)<k;i++)
if(v[mat[i][j-1]]<v[mat[i+(1<<(j-1))][j-1]])
mat[i][j]=mat[i][j-1];
else
mat[i][j]=mat[i+(1<<(j-1))][j-1];
}
}
int query(int l,int r)
{
int j=(int)log2(r-l+1);
return min(v[mat[l][j]],v[mat[r-(1<<j)+1][j]]);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
f>>n>>m;
for(int i=0;i<n;i++)
f>>v[i];
constr(n);
int x,y;
for(int i=0;i<m;i++)
{
f>>x>>y;
g<<query(x-1,y-1)<<'\n';
}
return 0;
}