Cod sursa(job #2565594)

Utilizator betybety bety bety Data 2 martie 2020 15:12:03
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int tree[2*100000+3];
int n;
int sum(int a, int b) {
a += n; b += n;
int s = 0;
while (a <= b) {
if (a%2 == 1) s =max(s, tree[a++]);
if (b%2 == 0) s =max(s, tree[b--]);
a /= 2; b /= 2;
}
return s;
}
void add(int k, int x) {
k += n;
tree[k] = x;
for (k /= 2; k >= 1; k /= 2) {
tree[k] = max(tree[2*k],tree[2*k+1]);
}
}
int main()
{
    int nr,m;
    cin>>nr>>m;
    n=nr;
    for(int i=1;i<=nr;++i)
    {
        int x;
        cin>>x;
        add(i,x);
    }
    for(int i=1;i<=m;++i)
    {
        int tip,a,b;
        cin>>tip>>a>>b;
        if(tip==0) cout<<sum(a,b)<<endl;
        else add(a,b);
    }
    return 0;
}