Cod sursa(job #2346809)

Utilizator BogdanAlexandruBogdan-Alexandru Dig BogdanAlexandru Data 18 februarie 2019 09:35:54
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#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;
}