Pagini recente » Cod sursa (job #2412623) | Cod sursa (job #1365399) | Cod sursa (job #309609) | Cod sursa (job #2252902) | Cod sursa (job #2871961)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[21][100001],n,m,exponent[100001],putere[21];
void calc()
{
int x=2,k=1;
while (x<=n)
{
for (int i=1;i<=n-x+1;i++) rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+x/2]);
x*=2;
k++;
}
}
int main()
{int x=1,k=0,y,z;
f>>n>>m;
for (int i=1;i<=n;i++) f>>rmq[0][i];
for (int i=1;i<=n;i++) {if (x*2==i) x*=2,k++;
exponent[i]=k,putere[k]=x;
}
calc();
for (int i=1;i<=m;i++) {f>>x>>y;
k=exponent[y-x+1];
z=putere[k];
g<<min(rmq[k][x],rmq[k][y-z+1])<<'\n';
}
}