Cod sursa(job #3167693)
| Utilizator | Data | 10 noiembrie 2023 23:49:05 | |
|---|---|---|---|
| Problema | Arbori de intervale | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.15 kb |
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int v[100101], b[100101];
const int l=1024;
void DisplayB()
{
for(int i=0; i<l; i++)
{
out<<b[i]<<" ";
}out<<'\n';
}
int main()
{
int n, m;
in>>n>>m;
for(int i=0; i<n; i++)
{
in>>v[i];
}
for(int i=0; i<n; i++)
{
if(v[i]>b[i/l])
{
b[i/l]=v[i];
}
}
int op, x, y, maxi=0;
for(int i=0; i<m; i++)
{
in>>op>>x>>y; x--; y--;
maxi=0;
if(op==1)
{
v[x]=y;
if(v[x]>b[x/l])
b[x/l]=v[x];
}
else
{
for(int j=x; j<=y;)
{
if(j%l==0 && j+l-1<=y)
{
maxi=max(maxi, b[j/l]);
j=j+l;
}
else
{
maxi=max(maxi, v[j]);
j++;
}
}
out<<maxi<<'\n';
}
}
//DisplayB();
}
