Pagini recente » Cod sursa (job #2125081) | Cod sursa (job #2566160) | Cod sursa (job #2179243) | Cod sursa (job #2153703) | Cod sursa (job #1910787)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int n, m, dp[100005][20], minimInterval;
void completareMatrice()
{
int logar=log2(n);
for(int j=1; j<=logar; ++j)
for(int i=1; i<=n; ++i)
if(i+1<<(j-1)<=n)
dp[i][j]=min(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
else
dp[i][j]=dp[i][j-1];
}
void gasireMinim(int x, int y)
{
int lungime=y-x+1;
int aux=(int)log2(lungime);
minimInterval=min(dp[x][aux], dp[y-(1<<aux)+1][aux]);
}
void read()
{
scanf("%d%d", &n, &m);
for(int i=1; i<=n; ++i)
scanf("%d", &dp[i][0]);
completareMatrice();
int x, y;
for(int i=1; i<=m; ++i)
{
scanf("%d%d", &x, &y);
gasireMinim(x, y);
printf("%d\n", minimInterval);
}
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
read();
return 0;
}