Pagini recente » Cod sursa (job #2309922) | Cod sursa (job #2027198) | Cod sursa (job #3204965) | Cod sursa (job #465006) | Cod sursa (job #2102459)
#include <fstream>
#include <math.h>
#include <iostream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
long N,K;
long P2(long x)
{
return (1<<(x));
}
int main()
{
f>>N>>K;
int L=log2(N);
long RMQ[N][L+1];
for(int i=0;i<N;i++)
f>>RMQ[i][0];
int N1=N;
for(int j=1;j<=L;j++)
{
N1-=P2(j-1);
for(int i=0;i<N1;i++)
{
long Min=RMQ[i][j]=RMQ[i][j-1];
int P=(P2(j-1));
for(int k=1;k<=P;k++)
Min=min(Min,RMQ[i+k][j-1]);
RMQ[i][j]=Min;
}
}
int st,dr;
long result;
for(int i=0;i<K;i++)
{
f>>st>>dr;
int L=log2(dr-st+1);
result=RMQ[st-1][L];
int M=dr-P2(L)+1;
for(int j=st;j<M;j++)
result=min(result,RMQ[j][L]);
g<<result<<'\n';
}
return 0;
}