Pagini recente » Cod sursa (job #1001852) | Cod sursa (job #281624) | Cod sursa (job #1713543) | Cod sursa (job #2950249) | Cod sursa (job #971513)
Cod sursa(job #971513)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,mn[100005][17],lg[100005],a[100005];
void Read()
{ int i;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a[i];
}
void Process()
{ int i,val=0,log,lim;
for(i=0;(1<<i)<=n;i++)
lg[1<<i]=i;
for(i=1;i<=n;i++)
{ if (lg[i]>val) val=lg[i];
lg[i]=val; }
for(i=1;i<=n;i++) mn[i][0]=a[i];
for(log=1;(1<<log)<=n;log++)
{ lim=n-(1<<log)+1;
for(i=1;i<=lim;i++)
mn[i][log]=min(mn[i][log-1],mn[i+(1<<(log-1))][log-1]);
}
}
void Solve()
{ int i,x,y,len;
for(i=1;i<=m;i++)
{ f>>x>>y;
len=lg[y-x+1];
g<<min(mn[x][len],mn[y-(1<<len)+1][len])<<"\n";
}
}
int main()
{ Read();
Process();
Solve();
return 0;
}