Cod sursa(job #3144842)

Utilizator Tibi201eweREWR Tibi201 Data 10 august 2023 20:54:17
Problema Range minimum query Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int batog[320],v[100000];

int main()
{
    FILE *fin, *fout;
    int intrebare,min,rad,n,m,i,x,y;
    char c;
    fin=fopen("rmq.in", "r");
    fscanf(fin, "%d%d", &n, &m);
    rad=sqrt(n);
    min=1000000;
    fgetc(fin);
    for(i=0; i<n; i++){
      c=fgetc(fin);
      while(c!='\n'){
        v[i]=v[i]*10+c-'0';
        c=fgetc(fin);
      }
      if(v[i]<min)
        min=v[i];
      if((i+1)%rad==0){
        batog[i/rad]=min;
        min=1000000;
      }
    }
    fout=fopen("rmq.out", "w");
    for(intrebare=0; intrebare<m; intrebare++){
      c=fgetc(fin);
      x=y=0;
      while(c!=' '){
        x=x*10+c-'0';
        c=fgetc(fin);
      }
      while(c!='\n'){
        y=y*10+c-'0';
        c=fgetc(fin);
      }
      x--;
      y--;
      i=x;
      min=1000000;
      while(i<=y){
        if(i%rad==0&&i+rad<=y){
          if(batog[i/rad]<min)
            min=batog[i/rad];
          i+=rad;
        }
        else{
          if(v[i]<min)
            min=v[i];
          i++;
        }
      }
      fprintf(fout, "%d\n", min);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}