Pagini recente » Cod sursa (job #857492) | Cod sursa (job #1163253) | Cod sursa (job #3206771) | Cod sursa (job #383895) | Cod sursa (job #2701247)
#include <iostream>
#include <fstream>
#define MAX_N 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[4 * MAX_N];
int n, m;
int pozToChange, valueToChange;
int targetSt, targetDr;
void addToTree(int st, int dr, int pozArb)
{
if(st == dr)
{
arb[pozArb] = valueToChange;
return;
}
int mij = (st + dr)/2;
if(pozToChange <= mij)
addToTree(st, mij, pozArb * 2);
else
addToTree(mij+1, dr, pozArb * 2 + 1);
arb[pozArb] = max(arb[pozArb * 2], arb[pozArb * 2 + 1]);
}
int getMax(int st, int dr, int pozArb)
{
if(dr < targetSt || st > targetDr)
return 0;
if(dr <= targetDr && st >= targetSt)
return arb[pozArb];
int mij = (st + dr)/2;
return max(getMax(st, mij, pozArb * 2), getMax(mij+1, dr, pozArb * 2 + 1));
}
void insertTree(int poz, int val)
{
pozToChange = poz;
valueToChange = val;
addToTree(1, n, 1);
}
int queryTree(int st, int dr)
{
targetDr = dr;
targetSt = st;
return getMax(1, n, 1);
}
void read()
{
f>>n>>m;
int x;
for(int i = 1; i<=n; i++)
{
f>>x;
insertTree(i, x);
}
}
void solve()
{
int x, y, q;
for(int i = 0; i<m; i++)
{
f>>q>>x>>y;
if(q == 0)
g<<queryTree(x, y)<<"\n";
else
insertTree(x, y);
}
}
int main()
{
read();
solve();
return 0;
}