Pagini recente » Istoria paginii runda/cnrv_1/clasament | Cod sursa (job #1626584) | Cod sursa (job #745272) | Cod sursa (job #2842707) | Cod sursa (job #407421)
Cod sursa(job #407421)
#include<stdio.h>
#define log 20
#define Nmax 100005
int N,M;
int RMQ[log][Nmax];
int lg[Nmax];
int min(int a,int b)
{
return (a<b?a:b);
}
void rmq()
{
for(int i=2;i<=N;++i)
lg[i]=lg[i>>1];
for(int i=1;(1<<i)<=N;++i)
for(int j=1,p=(1<<(i-1)); j+(1<<i)-1<=N;++j)
RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+p]);
}
int rez(int A,int B)
{
int dist,k,Sol;
dist=B-A+1;
k=lg[dist];
Sol=min(RMQ[k][A],RMQ[k][B-(1<<k)+1]);
}
void solve()
{
rmq();
int a,b;
for(int i=1;i<=M;++i)
{
scanf("%d %d",&a,&b);
printf("%d\n",rez(a,b));
}
}
void cit();
int main()
{
cit();
solve();
return 0;
}
void cit()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i)
scanf("%d",&RMQ[0][i]);
}