Pagini recente » Cod sursa (job #1398157) | Cod sursa (job #1781935) | Cod sursa (job #188602) | Cod sursa (job #816324) | Cod sursa (job #185913)
Cod sursa(job #185913)
#include <cstdio>
#include <string>
#include <cmath>
#define maxn 100001
#define maxlg 20
#define DIM 8192
int dp[maxlg][maxn];
int lg[maxn];
int n,m;
char ax[DIM];
int poz;
inline int min(int a, int b)
{
if(a<b) return a;
return b;
}
inline void cit(int &x)
{
x=0;
while(ax[poz]<'0' || ax[poz]>'9')
if(++poz==DIM) fread(ax, 1, DIM, stdin), poz=0;
while(ax[poz]>='0' && ax[poz]<='9')
{
x=x*10+ax[poz]-'0';
if(++poz==DIM) fread(ax, 1, DIM, stdin), poz=0;
}
}
void read()
{
freopen("rmq.in","r",stdin);
cit(n);cit(m);
// scanf("%d %d\n", &n, &m);
int i;
for(i=1;i<=n;++i)cit(dp[0][i]);// scanf("%d ", &dp[0][i]);
// for(i=1;i<=n;++i)printf("%d ", dp[0][i]);
//printf("\n");
}
void solve()
{
int i, j, cnt;
for(i=1;i<20;++i)
for(j=1;j+(1<<i)-1<=n;++j)
dp[i][j]=min(dp[i-1][j], dp[i-1][j+(1<<(i-1))]);
for(i=1;i<=n;++i) lg[i]=(int)log2((double)i);
//for(i=1;i<=n;++i) printf("%d ", dp[1][i]);
// printf("\n");
}
inline int query(int a, int b)
{
int p=lg[b-a];
// printf("%d_\n", p);
return min(dp[p][a],dp[p][b-(1<<p)+1]);
}
int main()
{
freopen("rmq.out","w",stdout);
read();
solve();
int p, q;
// char ax[64], *t;
while(m--)
{
/*
gets(ax);
t=strtok(ax, " ");
p=atoi(t);
t=strtok(0, " \n");
q=atoi(t);
*/
cit(p);cit(q);
//scanf("%d %d\n", &p, &q);
printf("%d\n", query(p, q));
}
return 0;
}