Pagini recente » Istoria paginii runda/11_martie_simulare_oji_2024_clasele_11_12/clasament | Cod sursa (job #1020745) | Cod sursa (job #2210068) | Cod sursa (job #238927) | Cod sursa (job #200924)
Cod sursa(job #200924)
#include <cstdio>
#include <cstring>
#include <cmath>
#define min(a,b) a<b?a:b
int N,M,RMQ[100001][16]; // log(2,100000) ~= 16
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&N,&M);
memset(RMQ,127,sizeof RMQ);
for(int i=1;i<=N;++i)
scanf("%d",&RMQ[i][0]);
for(int k=1;(1<<k)<=N;++k)
for(int i=1;i<=N;++i)
if(i+(1<<(k-1))<=N)
RMQ[i][k] = min(RMQ[i][k-1],RMQ[i+(1<<(k-1))][k-1]);
else RMQ[i][k] = RMQ[i][k-1];
for(int p1,p2,i=0;i<M;++i)
{
scanf("%d %d",&p1,&p2);
int log2L = int(log(p2-p1+1)/log(2));
printf("%d\n",min(RMQ[p1][log2L],RMQ[p2+1-(1<<log2L)][log2L]));
}
return 0;
}