Pagini recente » Cod sursa (job #861487) | Cod sursa (job #2920569) | Cod sursa (job #1675951) | Cod sursa (job #3290911) | Cod sursa (job #2753982)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,I,putere_2,a,b,dif,Min;
int rmq[17][100001];//17 linii deoarece log2(100001)<17 adica avem posibilitatea de a impartii in 17 puteri ale lui 2 ( 2^0 - 2^16 );
using namespace std;
int main ()
{
f>>n>>m;
for(int i=1;i<=n;i++){
f>>rmq[0][i];
}
I=0;
putere_2=2;
while(putere_2<n){
I++;
for(int i=1;i<=n-putere_2/2;i++){
rmq[I][i]=min(rmq[I-1][i],rmq[I-1][i+putere_2/2]);
}
for(int i=n-putere_2/2+1;i<=n;i++){
rmq[I][i]=rmq[I-1][i];
}
putere_2=putere_2*2;
}
for(int i=1;i<=m;i++){
f>>a>>b;
dif=b-a+1;
Min=100001;
while(dif>0){
putere_2=1;
I=0;
while(putere_2*2<=dif){
putere_2=putere_2*2;
I++;
}
Min=min(Min,rmq[I][a]);
a=a+putere_2;
dif=dif-putere_2;
}
g<<Min<<'\n';
}
return 0;
}