Pagini recente » Cod sursa (job #2809728) | Cod sursa (job #3246688) | Cod sursa (job #1167816) | Cod sursa (job #1402393) | Cod sursa (job #968646)
Cod sursa(job #968646)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N = 400005;
int n, m, val, a, b, maxi;
vector <int> arb(N, 0);
void Update(int nod, int st, int dr)
{
if(st == dr){
arb[nod] = val;
return ;
}
int m = (st + dr) >> 1;
if(a <= m) Update(2*nod, st, m);
else Update(2*nod+1, m+1, dr);
arb[nod] = max(arb[2*nod], arb[2*nod+1]);
}
void Find(int nod, int st, int dr)
{
if(a <= st && dr <= b)
{
maxi = max(maxi, arb[nod]);
return;
}
int m = (st + dr) >> 1;
if(a <= m) Find(2*nod, st, m);
if(m < b) Find(2*nod+1, m+1, dr);
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
{
fin>>val; a = i;
Update(1, 1, n);
}
while(m--)
{
bool cod;
fin>>cod>>a>>b;
if(!cod){
maxi = -1;
Find(1, 1, n);
fout<<maxi<<'\n';
}
else{
val = b;
Update(1, 1, n);
}
}
return 0;
}