Pagini recente » Cod sursa (job #377511) | Cod sursa (job #3248909) | Cod sursa (job #3281124) | Cod sursa (job #3238420) | Cod sursa (job #154184)
Cod sursa(job #154184)
#include <cstdio>
#include <string>
#include <cmath>
#define maxn 100001
#define maxlg 20
int dp[maxlg][maxn];
int lg[maxn];
int n,m;
inline int min(int a, int b)
{
if(a<b) return a;
return b;
}
void read()
{
freopen("rmq.in","r",stdin);
scanf("%d %d\n", &n, &m);
int i;
for(i=1;i<=n;++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);
//scanf("%d %d\n", &p, &q);
printf("%d\n", query(p, q));
}
return 0;
}