Pagini recente » Cod sursa (job #3302584) | Cod sursa (job #1898272) | Cod sursa (job #1569587) | Cod sursa (job #1717616) | Cod sursa (job #3157564)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int Nmax = 100005;
int v[Nmax],expi[Nmax],rmq[20][Nmax];
int main()
{
int n,q,i,l;
fin >> n >> q;
for(i=1;i<=n;i++)
fin >> v[i];
expi[1] = 0; expi[2] = 1; l = 4;
for(i=3;i<=n;i++){
if(i == l){
l*=2;
expi[i] = expi[i-1]+1;
}
else
expi[i] = expi[i-1];
}
for(i=1;i<=n;i++)
rmq[0][i] = v[i];
for(l=1;l<=expi[n];l++){
for(i=1;i<=n-l+1;i++)
rmq[l][i] = min(rmq[l-1][i],rmq[l-1][i+(1<<(l-1))]);
}
for(i=0;i<q;i++){
int x1,x2,e;
fin >> x1 >> x2;
e = expi[x2-x1+1];
fout << min(rmq[e][x1],rmq[e][x2-(1<<e)+1]) << '\n';
}
return 0;
}