Cod sursa(job #2814339)

Utilizator mmocanuMocanu Mihai-Adrian mmocanu Data 7 decembrie 2021 22:51:39
Problema Arbori de intervale Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include <stdio.h>
#include <stdlib.h>
///---BATOG---///

int v[100001];
int v2[1002];
FILE *fin,*fout;

int Citire(){
  int x;
  char a;
  a=fgetc(fin);
  while(a<'0' || a>'9'){
    a=fgetc(fin);
  }
  x=0;
  while(a>='0' && a<='9'){
    x*=10;
    x+=a-'0';
    a=fgetc(fin);
  }
  return x;
}

int main(){
  int n,m,i,n2,a,b,c,aux,a2,j,ma;
  fin=fopen("arbint.in","r");
  fout=fopen("arbint.out","w");
  fscanf(fin,"%d%d ",&n,&m);

  n2=1;
  while(n2*n2<=n){
    n2++;
  }
  n2--;

  for(i=1;i<=n;i++){
    v[i]=Citire();
    if(v2[i/n2]<v[i]){
      v2[i/n2]=v[i];
    }
  }

  for(i=0;i<m;i++){
    a=Citire();
    b=Citire();
    c=Citire();
    if(a==0){
      a=b;
      b=c;
      aux=a/n2;
      j=a;
      ma=0;
      while(j/n2==aux && j<=b){
        if(ma<v[j]){
          ma=v[j];
        }
        j++;
      }
      j=j/n2;
      while((j+1)*n2<=b){
        if(ma<v2[j]){
          ma=v2[j];
        }
        j++;
      }
      j=j*n2;
      while(j<=b){
        if(ma<v[j]){
          ma=v[j];
        }
        j++;
      }
      fprintf(fout,"%d\n",ma);
    }else{
      a=b;
      b=c;
      if(v[a]<b){
        if(v2[a/n2]<b){
          v2[a/n2]=b;
        }
        v[a]=b;
      }else{
        a2=v[a];
        v[a]=b;
        if(v2[a/n2]==a2){
          j=(a/n2)*n2;
          aux=a/n2;
          v2[aux]=0;
          while(j/n2==aux){
            if(v2[aux]<v[j]){
              v2[aux]=v[j];
            }
            j++;
          }
        }
      }
    }
  }





  fclose(fin);
  fclose(fout);
  return 0;
}