Pagini recente » Cod sursa (job #870275) | Cod sursa (job #2864492) | Cod sursa (job #759682) | Cod sursa (job #1850587) | Cod sursa (job #354180)
Cod sursa(job #354180)
#include<fstream>
#define N 1<<17
#define M 1<<5
inline int min (int x, int y)
{
if (x<y) return x;
return y;
}
using namespace std;
int v[N],lo[N], mat[M][N];
ifstream f1 ("rmq.in");
ofstream f2 ("rmq.out");
int main()
{
int n,m,a,b,i,j,p,q;
f1>>n>>m;
lo[1]=0;
for (i=1; i<=n; i++) f1>>v[i];
for (i=2; i<=n; i++) lo[i]=lo[i/2]+1;
for (i=1; i<=n; i++) mat[0][i]=v[i];
for (i=1; (1<<i)<=n; i++)
{
p=1<<i;
q=1<<(i-1);
for (j=1; j<=n-p+1; j++) mat[i][j]=min(mat[i-1][j],mat[i-1][j+p-q]);
}
for (i=1; i<=m; i++)
{
f1>>a>>b;
p=lo[b-a+1];
q=1<<p;
f2<<min(mat[1][a],mat[1][b-q+1])<<"\n";
}
return 0;
}