Cod sursa(job #2644086)

Utilizator Anca.ioanaMuscalagiu Anca Ioana Anca.ioana Data 23 august 2020 12:31:12
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <limits.h>
#define minn INT_MIN
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n ,m, poz, qst, qdr, st, dr, Arbore[400066], V[100001],op,a,b;
void Citire()
{ int i;
    f>>n>>m;
    for(i=0;i<n;i++)
        f>>V[i];
}
void Constructie(int st, int dr, int poz)
 { if(st==dr)
    Arbore[poz]=V[st];
    else { int m=(st+dr)/2;
         Constructie(st,m,2*poz+1);
         Constructie(m+1,dr,2*poz+2);
         Arbore[poz]=max(Arbore[poz*2+1],Arbore[poz*2+2]);
         }
 }
int Interogare(int qst, int qdr, int st, int dr, int poz)
 { if(qst<=st&&dr<=qdr)
     return Arbore[poz];
    if((qdr<st)||(dr<qst))
        return minn;
    int m=(st+dr)/2;
      return max(Interogare(qst,qdr,st,m,2*poz+1),Interogare(qst,qdr,m+1,dr,2*poz+2));
 }
void Actualizare(int qst, int qdr, int st, int dr, int poz,int x)
 {
    if(st==qst&&dr==qdr)
       Arbore[poz]=x;
    else { int m=(st+dr)/2;
           if(qst<=m)
             Actualizare(qst,qdr,st,m,2*poz+1,x);
           if(m<qdr)
             Actualizare(qst,qdr,m+1,dr,2*poz+2,x);
           Arbore[poz]=max(Arbore[poz*2+1],Arbore[poz*2+2]);
         }
 }
int main()
{ int i;
Citire();
 Constructie(0,n-1,0);
 for(i=1;i<=m;i++)
 {f>>op>>a>>b;
  if(op==0)
    { g<<Interogare(a-1,b-1,0,n-1,0)<<endl;
    }
  else { Actualizare(a-1,a-1,0,n-1,0,b);
       }
 }
f.close();
g.close();
    return 0;
}