Pagini recente » Cod sursa (job #838166) | Cod sursa (job #904175) | Cod sursa (job #1415084) | Cod sursa (job #1701189) | Cod sursa (job #767586)
Cod sursa(job #767586)
#include <fstream>
#define NRMAX 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int ss[25][NRMAX],pp[NRMAX],n,m;
void read();
void solve();
void write();
int minim(int,int);
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(int a,int b)
{
if (a<b && a!=0) return a;
return b;
}