Pagini recente » Cod sursa (job #1002948) | Cod sursa (job #1606591) | Istoria paginii runda/lasm_baraj_cl10/clasament | Cod sursa (job #1002960) | Cod sursa (job #1682470)
#include<cstdio>
#include<algorithm>
const int NMAX=100001;
int v[NMAX],rmq[18][NMAX],lg[NMAX];
int main()
{
FILE *in=fopen("rmq.in","r");
int n,m;
fscanf(in,"%d %d ",&n,&m);
for(int i=1;i<=n;i++)
{
fscanf(in,"%d ",&v[i]);
}
lg[1]=0;
for(int i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(int i=1;i<=n;i++)
rmq[0][i]=v[i];
for(int lungime=1;(1<<lungime)<=n;lungime++)
{
for(int i=1;i<=n;i++)
{
rmq[lungime][i]=std::min(rmq[lungime-1][i],rmq[lungime-1][i+(1<<(lungime-1))]);
}
}
FILE *out=fopen("rmq.out","w");
for(int i=1;i<=m;i++)
{
int x,y;
fscanf(in,"%d %d ",&x,&y);
fprintf(out,"%d\n",std::min(rmq[lg[y-x+1]][x],rmq[lg[y-x+1]][x+y-x+1-(1<<lg[y-x+1])]));
}
fclose(in);
fclose(out);
return 0;
}