Pagini recente » Cod sursa (job #976357) | Cod sursa (job #803719) | Cod sursa (job #2138912) | Cod sursa (job #55402) | Cod sursa (job #159896)
Cod sursa(job #159896)
#include<stdio.h>
#define Nm 100001
#define Lognm 17
#define min(a,b) ((a)<(b)?(a):(b))
int M[Lognm][Nm],Log[Nm],n,m;
void read()
{
char S[7];
int i,j;
freopen("rmq.in","r",stdin);
scanf("%d%d ",&n,&m);
for(i=1;i<=n;++i)
{
gets(S);
for(j=0;S[j];++j)
M[0][i]=M[0][i]*10+S[j]-'0';
}
}
void compute_rmq()
{
int i,j,cnt;
for(cnt=2,i=1;cnt<=n;++i,cnt<<=1)
for(j=1;j<=n-cnt+1;++j)
M[i][j]=min(M[i-1][j],M[i-1][j+(cnt>>1)]);
for(i=2;i<=n;++i)
if(1<<Log[i-1]+1==i)
Log[i]=Log[i-1]+1;
else
Log[i]=Log[i-1];
}
void write()
{
char S[14];
int a,b,i;
freopen("rmq.out","w",stdout);
while(m--)
{
gets(S);
for(a=i=0;S[i]!=' ';++i)
a=a*10+S[i]-'0';
for(b=0,++i;S[i];++i)
b=b*10+S[i]-'0';
i=Log[b-a+1];
printf("%d\n",min(M[i][a],M[i][b-(1<<i)+1]));
}
}
int main()
{
read();
compute_rmq();
write();
return 0;
}