Pagini recente » Cod sursa (job #2852067) | Cod sursa (job #1741665) | Cod sursa (job #2515285) | Cod sursa (job #2876323) | Cod sursa (job #354181)
Cod sursa(job #354181)
#include<fstream>
#define N 1<<17
#define M 1<<5
using namespace std;
int v[N],lo[N], mat[M][N];
ifstream f1 ("rmq.in");
ofstream f2 ("rmq.out");
inline int min (int x, int y)
{
if (x<y) return x;
return y;
}
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;
}