Cod sursa(job #3151814)

Utilizator brianabucur11Briana Bucur brianabucur11 Data 22 septembrie 2023 21:47:19
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

int n, m, p, v[100005], x, y, z, a[1005];

int find (int x)
{
    return (x+p-1)/p;
}

int main()
{
    fin >> n >> m;
    p=floor(sqrt(n));
    for (int i=1; i<=n; i++)
    {
        fin >> v[i];
        a[find(i)]=max(a[find(i)],v[i]);
    }
    for (int i=1; i<=m; i++)
    {
        fin >> z >> x >> y;
        if (z==0)
        {
            int Max=-1;
            for (int j=x; find(j)==find(x); j++)
                Max=max(Max,v[j]);
            for (int j=find(x)+1; j<=find(y)-1; j++)
                Max=max(Max,a[j]);
            for (int j=y; find(j)==find(y); j--)
                Max=max(Max,v[j]);
            fout << Max << '\n';
        }
        else
        {
            v[x]=y;
            a[find(x)]=0;
            for (int j=x; find(j)==find(x); j--)
                a[find(x)]=max(a[find(x)],v[j]);
            for (int j=x+1; find(j)==find(x); j++)
                a[find(x)]=max(a[find(x)],v[j]);
        }
    }
    return 0;
}