Cod sursa(job #2565568)

Utilizator betybety bety bety Data 2 martie 2020 14:58:39
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int tree[2*131072+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=1;
    while(n<nr)
        n*=2;
    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;
}