Cod sursa(job #1982621)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 19 mai 2017 18:09:12
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int v[100001];
int m[100001][17];
int log[100001];

int min(int a, int b){
  if(a>b)
      a=b;
  return a;
}

int main()
{
    FILE *fin, *fout;
    int n,q,i,j;
    fin=fopen("rmq.in","r");
    fout=fopen("rmq.out","w");
    fscanf(fin,"%d%d",&n,&q);
    for(i=1;i<=n;i++){
      fscanf(fin,"%d",&v[i]);
      m[i][0]=v[i];
    }
    for(int p=1;(1<<p)<n;p++){
      for(i=1;i+(1<<p)-1<=n;i++){
        m[i][p]=min(m[i][p-1],m[i+(1<<(p-1))][p-1]);
      }
    }

    log[1]=0;
    for(i=2;i<=n;i++){
      log[i]=log[i/2]+1;
    }

    for(q;q>0;q--){
      fscanf(fin,"%d%d",&i,&j);
      fprintf(fout,"%d\n",min(m[i][log[j-i]],m[j-(1<<log[j-i])+1][log[j-i]]));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}