Pagini recente » Cod sursa (job #2963373) | Cod sursa (job #2281207) | Cod sursa (job #2245689) | Cod sursa (job #718165) | Cod sursa (job #2701256)
#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 power2 = 1;
int targetSt, targetDr;
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)
{
int pozArb = power2 + poz - 1;
arb[pozArb] = val;
while(pozArb > 1)
{
pozArb>>=1;
arb[pozArb] = max(arb[pozArb * 2], arb[pozArb * 2 + 1]);
}
}
int queryTree(int st, int dr)
{
targetDr = dr;
targetSt = st;
return getMax(1, power2, 1);
}
void read()
{
f>>n>>m;
while(power2 < n)
power2 <<= 1;
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;
}