Pagini recente » Cod sursa (job #1561824) | Cod sursa (job #1602941) | Cod sursa (job #1074550) | Cod sursa (job #1209547) | Cod sursa (job #767593)
Cod sursa(job #767593)
#include <fstream>
#define NRMAX 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
long ss[20][NRMAX],pp[NRMAX],n,m;
void read();
void solve();
void write();
int minim(long,long);
int main()
{
read();
solve();
write();
f.close();g.close();
return 0;
}
void read()
{
f>>n>>m;pp[0]=-1;
for (int i=1;i<=n;i++)
f>>ss[0][i],pp[i]=pp[i/2]+1;
}
void solve()
{
for (int i=1;i<=pp[n];i++)
for (int j=1;j+(1<<i)-1<=n;j++)
ss[i][j]=minim(ss[i-1][j],ss[i-1][j+(1<<(i-1))]);
}
void write()
{
for (int i=1;i<=m;i++)
{
int a,b,np=1<<pp[b-a-1];
f>>a>>b;
int dis=b-a-np;
g<<minim(ss[np][a],ss[np][a+dis])<<'\n';
}
}
int minim(long a,long b)
{
if (a<b && a!=0) return a;
return b;
}