Pagini recente » Cod sursa (job #2300384) | Cod sursa (job #2797227) | Cod sursa (job #2426475) | Cod sursa (job #2581270) | Cod sursa (job #873517)
Cod sursa(job #873517)
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
FILE*in=fopen("rmq.in","r");
FILE*out=fopen("rmq.out","w");
int a[20][100001],logg[100001],limita,query,k=2;
int main()
{
fscanf(in,"%d%d",&limita,&query);
logg[0]=-1;
for(int i=1;i<=limita;++i)
{
fscanf(in,"%d",&a[0][i]);
logg[i]=logg[i/2]+1;
}
for(int i=1;i<limita;++i)
a[1][i]=min(a[0][i],a[0][i+1]);
int contor=limita;
for(int i=2;i<=logg[limita];++i)
{
contor-=k;
for(int j=1;j<contor;++j)
{
a[i][j]=min(a[i-1][j],a[i-1][j+k]);
}
k*=2;
}
for(int i=1;i<=query;++i)
{
int Qa,Qb;
fscanf(in,"%d%d",&Qa,&Qb);
int ajutor=logg[Qb-Qa+1];
fprintf(out,"%d\n",min(a[ajutor][Qa],a[ajutor][Qb-(int)pow(2,ajutor)+1]));
}
fclose(in);
fclose(out);
}