Cod sursa(job #3245439)

Utilizator cezarica23cezar tambozi cezarica23 Data 29 septembrie 2024 01:04:46
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
using namespace std;
long long int v[100001];
long long int s[400001];
int n,i,m,a,b,c;
void maketree(int i, int p, int q)
{
    if(p==q)
    {
        s[i]=v[p];
    }
    else
    {
        int m=(p+q)/2;
        maketree(i*2,p,m);
        maketree(i*2+1,m+1,q);
        s[i]=s[2*i]+s[2*i+1];
    }
}
long long maxx(int i, int left, int right, int ls, int rd)
{
    long long int m=0;
       for(int j=ls; j<=rd; j++)
       {
           m=max(m, v[j]);
       }
       return m;
}
void update(int i, int p, int q, int a)
{
    if(p==q)
        s[i]=v[p];
    else
    {
        int m=(p+q)/2;
        if(a<=m)
            update(2*i,p,m,a);
        else update(2*i+1,m+1,q,a);
        s[i]=s[2*i]+s[2*i+1];
    }
}
int main()
{ 
    cin>>n>>m;
    for(i=1;i<=n;i++)
        cin>>v[i];
    maketree(1,1,n);
  for(i=1;i<=m;i++)
  {
      cin>>c>>a>>b;
      if(c==0)
        cout<<maxx(1,1,n,a,b)<<endl;
      else
      {
          v[a]=b;
          update(1,1,n,a);
      }
  }
    return 0;
}