Cod sursa(job #2643391)

Utilizator Anca.ioanaMuscalagiu Anca Ioana Anca.ioana Data 19 august 2020 18:04:36
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int A[10001], B[1001];
int a, b, v,i,j,maxim=-1,o;
 void Citire()
 { f>>n>>m;
 int num=sqrt(n);
     for(i=1;i<=n;i++)
        f>>A[i];

    for(i=1;i<=num+1;i++)
      for(j=(i-1)*num+1;j<=i*num;j++)
         if(B[i]<A[j])
           B[i]=A[j];

 }
 void Actualizare(int a, int b)
   { float nr;
   int k,num,maxx=-1;
     A[a]=b;
     num=sqrt(n);
     nr=(float)a/num;
     if(nr!=(int)nr)
        k=(int)nr+1;
      else k=(int)nr;
      for(i=(k-1)*num+1;i<=k*num;i++)
        if(maxx<A[i])
          maxx=A[i];
      B[k]=maxx;
   }
 void Maxim(int a, int b)
   { float nr;
     int  k, q, int1, int2,num;
      maxim=-1;
      num=sqrt(n);
      nr=(float)a/num;
      if(nr!=(int)nr)
        k=(int)nr+1;
      else k=(int)nr;

    if(a!=(k-1)*num+1)
      {int1=k+1;
       for(i=a;i<=k*num;i++)
        if(maxim<A[i])
         maxim=A[i];
      }
    else int1=k;

      nr=(float)b/num;
      if(nr!=(int)nr)
        q=(int)nr+1;
      else q=(int)nr;

    if(b!=q*num)
        {int2=q-1;
        for(i=(q-1)*num+1;i<=b;i++)
            if(maxim<A[i])
             maxim=A[i];
        }
    else int2=q;
    for(i=int1;i<=int2;i++)
        if(maxim<B[i])
          maxim=B[i];
   }
int main()
{
Citire();
for(o=1;o<=m;o++)
{ f>>v>>a>>b;
    if(v==0)
    {
     Maxim(a,b);
     g<<maxim<<'\n';
    }
    else {
           Actualizare(a,b);
         }
}
f.close();
g.close();
    return 0;
}