Cod sursa(job #2302049)

Utilizator HunMakerFazekas Hunor HunMaker Data 13 decembrie 2018 19:22:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> Fa;
int n,m;
int maximum;
void Update(int node, int down, int up, int x, int y)//Fa[x]=y, down es up a kereseshez kellenek,node=a graf csucsa
{
    if(down==up)
    {
        Fa[node]=y;
        return;
    }
    int middle=(down+up)/2;
    if(x<=middle)
        Update(node*2,down,middle,x,y);
    else
        Update(node*2+1,middle+1,up,x,y);
    Fa[node]=max(Fa[node*2],Fa[node*2+1]);
}
void Query(int node,int down, int up, int x, int y)
{
    if(x<=down && up<=y)
    {
        maximum=max(maximum,Fa[node]);
        return;
    }
    int middle=(down+up)/2;
    if(x<=middle)
        Query(node*2,down,middle,x,y);
    if(y>middle)
        Query(node*2+1,middle+1,up,x,y);
    //maximum=max(maximum,Fa[node]);

}
int main()
{
    ifstream be ("arbint.in");
    ofstream ki ("arbint.out");
    be>>n>>m;
    int s;
    Fa.resize(4*n+66);
    for(int i=1; i<=n; i++)
    {
        be>>s;
        Update(1,1,n,i,s);
    }
    int e,x,y;
    for(int i=0; i<m; i++)
    {
        be>>e>>x>>y;
        if(e==1)
        {
            Update(1,1,n,x,y);
        }
        else if(e==0)
        {
            Query(1,1,n,x,y);
            ki<<maximum<<'\n';
            maximum=0;
        }
    }
    be.close();
    ki.close();
    return 0;
}