Pagini recente » Cod sursa (job #911414) | Cod sursa (job #2232633) | Cod sursa (job #825341) | Cod sursa (job #1992117) | Cod sursa (job #2357635)
#include <cstdio>
#include <vector>
#define N 100002
using namespace std;
FILE *f,*g;
int log[N];
vector <int> pd[18];
int main()
{
f=fopen("rmq.in","r");
g=fopen("rmq.out","w");
int m,n,a,b,x;
fscanf(f,"%d %d",&n,&m);
log[0]=-1;
for(int i=1;i<=n;++i)
{
fscanf(f,"%d",&x);
if(!pd[0].size())
pd[0].push_back(0);
pd[0].push_back(x);
log[i]=1+log[i/2];
}
int val,poz,dif,lin;
for(int i=1;i<=log[n];++i)
{
poz=(1<<(i-1));
for(int j=1;j+poz<=n;++j)
{
if(!pd[i].size())
pd[i].push_back(0);
pd[i][j]=min(pd[i-1][j],pd[i-1][j+poz]);
}
}
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d",&a,&b);
dif=b-a+1;
lin=log[dif];
poz=(1<<lin);
val=min(pd[lin][a],pd[lin][b-poz+1]);
fprintf(g,"%d\n",val);
}
fclose(f);
fclose(g);
return 0;
}