Pagini recente » Cod sursa (job #435747) | Cod sursa (job #1044037) | Cod sursa (job #1296556) | Cod sursa (job #3135814) | Cod sursa (job #2882848)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAX=1e5+5;
const int LOG=20;
int n,m,v[MAX],rmq[LOG][MAX],st,dr,lg[MAX];
int main()
{
fin >> n >> m;
for(int i=1;i<=n;i++)
fin >> v[i];
lg[1]=0;
for(int i=2;i<=n;i++)
lg[i]=lg[i>>2]+1;
for(int j=1;j<=n;j++)
rmq[0][j]=v[j];
for(int i=1;(1<<i)<=n;i++)
for(int j=n-(1<<(i-1))+1;j>=1;j--)
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
while(m--)
{
fin >> st >> dr;
int len=dr-st+1;
fout << min(rmq[lg[len]][st],rmq[lg[len]][dr-(1<<lg[len])+1]) << '\n';
}
return 0;
}