Cod sursa(job #3264409)

Utilizator Matei_AndronacheMatei Andronache Matei_Andronache Data 21 decembrie 2024 02:56:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
long long v[100000],batog[400],r;
int query (int a,int b)
{
    int max=0;
    while (a%r!=0 && a<=b)
    {
        if (v[a]>max)
            max=v[a];
        a++;
    }
    while (a+r<=b)
    {
        if (batog[a/r]>max)
            max=batog[a/r];
        a+=r;
    }
    while (a<=b)
    {
        if (v[a]>max)
            max=v[a];
        a++;
    }
    return max;
}
void update(int a,int b)
{
    v[a]=b;
    a=(a/r)*r;
    batog[a/r]=0;
    if (v[a]>batog[a/r])
            batog[a/r]=v[a];
    a++;
    while (a%r!=0)
    {
        if (v[a]>batog[a/r])
            batog[a/r]=v[a];
        a++;
    }
}
int main()
{
    int n,m,i;
    cin>>n>>m;
    r=sqrt(n);
    for(i=0;i<n;i++)
    {
        cin>>v[i];
        if (v[i]>batog[i/r])
            batog[i/r]=v[i];
    }
    int c,a,b;
    for (i=1;i<=m;i++)
    {
        cin>>c>>a>>b;
        a--;
        if (c==0)
        {
            b--;
            cout<<query(a,b)<<endl;
        }
        if (c==1)
        {
            update(a,b);
        }
    }
    return 0;
}