Pagini recente » Cod sursa (job #1379668) | Cod sursa (job #2633978) | Cod sursa (job #2511627) | Cod sursa (job #696643) | Cod sursa (job #1956252)
#include <bits/stdc++.h>
using namespace std;
const int SIZE = 10000;
struct InParsare
{
char buffer[SIZE];
int index;
char nchar()
{
if(index == SIZE)
{
fread(buffer,1,SIZE,stdin);
index = 0;
return nchar();
}
return buffer[index++];
}
InParsare()
{
freopen("rmq.in","r",stdin);
index = 0;
fread(buffer,1,SIZE,stdin);
}
InParsare& operator >> (int &x)
{
x = 0;
char c;
for(c = nchar(); c < '0' || c > '9'; c = nchar());
for(;c >= '0' && c <= '9'; c = nchar())
x = x * 10 + c - '0';
return *this;
}
void reload()
{
fseek(stdin,0,SEEK_SET);
index = 0;
fread(buffer,1,SIZE,stdin);
}
}in;
const int NMAX = 100003;
int a[NMAX], n, m;
int dp[20][NMAX];
void rmq()
{
for(int i=1;i<=n;i++)
dp[0][i] = a[i];
for(int i=1;(1<<i) <= n; i++)
{
for(int j=1;j<=n-(1<<i)+1;j++)
{
int power = 1<<(i-1);
dp[i][j] = min(dp[i-1][j],dp[i-1][j+power]);
}
}
}
int main()
{
freopen("rmq.out","w",stdout);
in>>n>>m;
for(int i=1;i<=n;i++)
in>>a[i];
rmq();
for(int i=1;i<=m;i++)
{
int x,y;
in>>x>>y;
printf("%d\n",min(dp[((int)log2(y-x+1))][x],dp[((int)log2(y-x+1))][x+((y-x+1) - (1<<((int)log2(y-x+1))))]));
}
return 0;
}