Cod sursa(job #2133513)

Utilizator sulzandreiandrei sulzandrei Data 17 februarie 2018 01:09:03
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
#include <vector>
#include <string>
#include <stack>
#include <cctype>
#include <sstream>
#include <limits>
#define pb push_back
using namespace std;
std::ifstream in("arbint.in");
std::ofstream out("arbint.out");
struct node
{
    // relevant data
};
const int MAX_N = 100003;
int v[4*MAX_N+10]{-1};
int N;
void Update(int n, int st, int dr, int a, int b,int val)
{
    if(a <=st && dr <= b)
        v[n] = val;
    else
    {
        int mij = (st+dr)/2;
        if( a<= mij)
            Update(2*n,st,mij,a,b,val);
        if( b> mij)
            Update(2*n+1,mij+1,dr,a,b,val);
        v[n] = max(v[2*n],v[2*n+1]);
    }

}
int Query(int n, int st, int dr, int a,  int b)
{
     if(a <=st && dr <= b)
        return v[n];
    else
    {
         int mij = (st+dr)/2,left = 0, right = 0;
        if( a<= mij)
            left = Query(2*n,st,mij,a,b);
        if( b> mij)
            right = Query(2*n+1,mij+1,dr,a,b);
        return std::max(left,right);
    }

}


int main()
{
    int M,val,op,a,b;
    in >> N >> M;
    for(int i = 1 ; i <= N ; i++)
    {
        in >> val;
        Update(1,1,N,i,i,val);
    }
    for(int i = 0 ;  i < M ;i++)
    {
        in >> op >> a >> b;
        if(op == 0)
            out<<Query(1,1,N,a,b)<<'\n';
        else
             Update(1,1,N,a,a,b);
    }
    return 0;
}