Pagini recente » Cod sursa (job #1958367) | Cod sursa (job #2837343) | Cod sursa (job #2812635) | Cod sursa (job #3248420) | Cod sursa (job #2684684)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int N=1e5+5;
int v[N],r[20][N],n,pow[17],log2[1002];
int main()
{
int m;
f>>n>>m;
for(int i=1;i<=n;i++)
{
f>>v[i];
}
int lim=0,p=1;
while(p<=n)
{
pow[lim]=p;
lim++;
p=p*2;
}
lim--;
for(int i=1;i<=n;i++)
{
r[0][i]=v[i];
}
for(int k=1;k<=lim;k++)
{
for(int i=1;i<=n;i++)
{
r[k][i]=min(r[k-1][i],r[k-1][i+(1<<(k-1))]);
}
}
log2[1]=0;
for(int i=2;i<=n;i++)
{
log2[i]=log2[i/2]+1;
}
for(int i=1;i<=m;i++)
{
int st,dr;
f>>st>>dr;
int l=dr-st+1,exp;
exp=log2[l];
g<<min(r[exp][st],r[exp][dr-(1<<exp)+1])<<"\n";
}
return 0;
}