Cod sursa(job #3332845)
| Utilizator | Data | 9 ianuarie 2026 13:06:28 | |
|---|---|---|---|
| Problema | Arbori de intervale | Scor | 10 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.37 kb |
#include <bits/stdc++.h>
using namespace std;
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
long long n, t, a, b, o, rez=0, lim=100, cat, cum, j=0;
cin >> n >> t;
vector <long long> v;
vector <long long> mare;
v.resize(n+1);
mare.resize(n/lim+1);
for(int i=1; i<=n; i++)
{
cin >> v[i];
j=i/lim;
mare[j]=max(mare[j], v[i]);
}
while(t>0)
{
cin >> o;
if(o==0)
{
cin >> a >> b;
cat=b/lim;
cum=a/lim;
if(cat!=cum)
{
for(int i=a; i<(cum+1)*lim; i++)
rez=max(rez, v[i]);
for(int i=cum+1; i<cat; i++)
rez=max(rez, mare[i]);
for(int i=cat*lim; i<=b; i++)
rez=max(rez, v[i]);
}
else
for(int i=a; i<=b; i++)
rez=max(rez, v[i]);
cout << rez << "\n";
rez=0;
}
else
if(o==1)
{
cin >> a >> b;
v[a]=b;
}
t--;
}
return 0;
}