Pagini recente » Cod sursa (job #1346090) | Cod sursa (job #1536906) | Cod sursa (job #2775665) | Cod sursa (job #539752) | Cod sursa (job #1620735)
#include <fstream>
#define NMax 200010
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, queries, elem, intTree[NMax], cmd, a, b, Max;
int getMax(int a, int b)
{
if (a > b)
return a;
return b;
}
void update(int node, int left, int right, int val)
{
if (left == right){
intTree[node] = val;
return ;
}
else {
int mid = (left+right) / 2;
if (a<=mid)
update(2*node, left, mid, val);
else
update(2*node + 1, mid+1, right, val);
intTree[node] = getMax(intTree[2*node], intTree[2*node+1]);
}
}
void getMax(int node, int left, int right)
{
if (a <= left && b >= right)
Max = getMax(Max, intTree[node]);
else {
int mid = (left + right) / 2;
if (a <= mid)
getMax(2*node, left, mid);
if (b > mid)
getMax(2*node + 1, mid + 1, right);
}
}
int main()
{
f >> n >> queries;
for (int i=1; i<=n; i++) {
f>>elem;
a = i;
update(1, 1, n, elem);
}
for (int i = 1; i <= queries; i++) {
f>>cmd>>a>>b;
if (cmd == 0) {
Max = -1;
getMax(1, 1, n);
g << Max<<"\n";
}
else
update(1, 1, n, b);
}
return 0;
}