Pagini recente » Cod sursa (job #1068302) | Cod sursa (job #593191) | Cod sursa (job #2281164) | Cod sursa (job #1506508) | Cod sursa (job #2381164)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int M, N, T, x, y;
int arb[400010];
int a[100010];
void form_arb(int st, int dr, int poz)
{
if(st > dr)
return;
if(st == dr)
{
arb[poz] = a[dr];
return;
}
int mj = (st + dr-1)/2;
form_arb(st, mj, 2*poz);
form_arb(mj+1, dr, 2*poz+1);
arb[poz] = max(arb[2*poz], arb[2*poz+1]);
}
int intreb(int st, int dr, int poz)
{
if(x <= st && y >= dr)
return arb[poz];
if(x < st && y < st || x > dr && y > dr)
return 0;
int mj = (st + dr-1)/2, g, h;
if(mj < st)
g = 0;
else g = intreb(st, mj, 2*poz);
if(mj > dr)
h = 0;
else h = intreb(mj+1, dr, 2*poz+1);
return max(g, h);
}
void schimb(int st, int dr, int poz)
{
if(st > dr)
return;
if(st == dr)
{
if(st == x)
arb[poz] = y;
return;
}
int mj = (st + dr-1)/2;
schimb(st, mj, 2*poz);
schimb(mj+1, dr, 2*poz+1);
arb[poz] = max(arb[2*poz], arb[2*poz+1]);
}
int main()
{
f>>N>>M;
for(int i=1; i<=N; ++i)
{
f>>a[i];
}
form_arb(1, N, 1);
for(int j=1; j<=M; j++)
{
f>>T>>x>>y;
if(T == 0)
g<<intreb(1, N, 1)<<'\n';
else schimb(1, N, 1);
}
return 0;
}