Pagini recente » Cod sursa (job #910824) | Cod sursa (job #206025) | Istoria paginii runda/cnamd/clasament | Cod sursa (job #182121) | Cod sursa (job #2346809)
#include <stdio.h>
#define Min(a,b) ( a<b ? a : b )
using namespace std;
FILE *f,*g;
int N,M,log[100010],RM[30][100010];
void ReadAndCreateVectorsNigga()
{
int i;
fscanf(f,"%d %d",&N,&M);
for(i=2;i<=N;i++)log[i]=1+log[i/2];///calculez logaritmul
for(i=1;i<=N;i++)fscanf(f,"%d",&RM[0][i]);
}
void SolveProblemNigga()
{
int i,j,K,X,Y;
for(i=1;i<=log[N];++i)///separ intervalul in doua intervale si fac minimul
for(j=1;j<=N-(1<<i)+1;++j)
RM[i][j]=Min(RM[i-1][j],RM[i-1][j+1<<(i-1)]);
for(i=1;i<=M;++i)
{
fscanf(f,"%d %d",&X,&Y);
K=log[Y-X+1];
fprintf(g,"%d\n",Min(RM[K][X],RM[K][Y-(1<<K)+1]));
}
}
int main()
{
f=fopen("rmq.in","r");g=fopen("rmq.out","w");
ReadAndCreateVectorsNigga();
SolveProblemNigga();
fclose(f);fclose(g);
return 0;
}