Pagini recente » Cod sursa (job #1088815) | Cod sursa (job #111134) | Cod sursa (job #3220211) | Cod sursa (job #227295) | Cod sursa (job #2083572)
#include <fstream>
using namespace std;
int rmq[100001][20],a[100001],log[100001];
int main()
{ int n,m,i,j,mij,st,dr;
ifstream f("rmq.in");
ofstream g("rmq.out");
f>>n>>m;
for (i=1;i<=n;++i)
f>>a[i];
for (i=1;i<=n;++i)
rmq[i][0]=i;
for (j=1;1<<j<=n;++j)
for (i=1;i+(1<<j)-1<=n;++i)
if (a[rmq[i][j-1]]<a[rmq[i+(1<<(j-1))][j-1]])
rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
/* for (j=0;1<<j<=n;++j) {
for (i=1;i+(1<<j)-1<=n;++i)
g<<a[rmq[i][j]]<<" ";
g<<'\n';}*/
for (i=2;i<=n;++i)
log[i]=log[i/2]+1;
for (i=1;i<=m;++i) {
f>>st>>dr;
mij=log[dr-st+1];
g<<min(a[rmq[st][mij]],a[rmq[dr-(1<<mij)+1][mij]])<<'\n';;
}
return 0;
}