Pagini recente » Cod sursa (job #2983503) | Cod sursa (job #97763) | Cod sursa (job #1255671) | Cod sursa (job #1477515) | Cod sursa (job #1229228)
#include <iostream>
#include <algorithm>
#include <fstream>
#define Nmax 4*100001
using namespace std;
int ARB[Nmax], l, r, val, N, M;
void init(int node, int left, int right)
{
ARB[node] = 0;
if(left >= right)
return;
int mid = (left + right)/2;
init(node*2, left, mid);
init(node*2 + 1, mid+1, right);
}
void update(int node, int left, int right)
{
if(l <= left && right <= r)
{
ARB[node] = val;
return;
}
if(left >= right)
return;
int mid = (left + right)/2;
if(l <= mid)
update(node*2, left, mid);
else
update(node*2 + 1, mid+1, right);
ARB[node] = max(ARB[node*2], ARB[node*2 + 1]);
}
int query(int node, int left, int right)
{
if(l <= left && right <= r)
return ARB[node];
if(left >= right)
return -1;
int mid = (left + right)/2, a = -1, b = -1;
if(mid >= l)
a = query(node*2, left, mid);
if(mid < r)
b = query(node*2 + 1, mid+1, right);
return max(a,b);
}
int main()
{
init(1,1,N);
ifstream f("arbint.in");
f>>N>>M;
int op;
for(int i=1;i<=N;++i)
{
f>>val;
l = r = i;
update(1,1,N);
}
ofstream g("arbint.out");
while(M--)
{
f>>op;
if(op == 0)
{
f>>l>>r;
g<<query(1,1,N)<<"\n";
}
else
{
f>>l>>val;
r = l;
update(1,1,N);
}
}
f.close();
g.close();
return 0;
}