Pagini recente » Cod sursa (job #1372485) | Cod sursa (job #2528552) | Cod sursa (job #579724) | Cod sursa (job #3220130) | Cod sursa (job #1245712)
#include <cstdio>
#include <algorithm>
using namespace std;
int a[100005];
int d[100005][20];
int n;
void process()
{
for(int i=0;i<n;i++)
d[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=0;i+(1<<j)<=n;i++)
d[i][j]=min(d[i][ j-1 ], d[i+(1<<(j-1))][ j-1 ]);
}
int querry( int x, int y )
{
int lg= y-x+1;
int pw=0;
while((1<<pw)<=lg)pw++;
pw--;
return min(d[x-1][pw], d[y-(1<<pw)][pw]);
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int m;
scanf("%d%d", &n, &m);
for(int i=0;i<n;i++)
scanf("%d", &a[i]);
process();
for(int i=0;i<m;i++)
{
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", querry(x, y));
}
return 0;
}