Cod sursa(job #2812989)

Utilizator Matei_PanzariuMatei Panzariu Matei_Panzariu Data 5 decembrie 2021 16:29:13
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,q,pr,x,y,arb[100002],maxi,s;
void update(int poz,int st,int dr,int val)
{
    if(st==dr)
    {
        arb[poz]=val;
        return;
    }
        int div=(st+dr)/2;
        if(s<=div)
            update(2*poz,st,div,val);
        else
            update(2*poz+1,div+1,dr,val);
    arb[poz]=max(arb[poz*2],arb[poz*2+1]);
}
void ras(int poz,int st,int dr)
{
    if(x<=st && dr<=y)
    {
        if(maxi<arb[poz])
            maxi=arb[poz];
        return;
    }
    int div=(st+dr)/2;
    if(x<=div)
        ras(2*poz,st,div);
    if(div<y)
        ras(2*poz+1,div+1,dr);
}
int main()
{
    cin>>n>>q;
    for(int i=1; i<=n; i++)
    {
        cin>>x;
        s=i;
        update(1,1,n,x);
    }
    for(int i=1; i<=q; i++)
    {
        cin>>pr>>x>>y;
        if(pr==0)
        {
            maxi=0;
            ras(1,1,n);
            cout<<maxi<<'\n';
        }
        else
        {
            s=x;
            update(1,1,n,y);
        }
    }
}