Pagini recente » Cod sursa (job #215298) | Cod sursa (job #1084593) | Cod sursa (job #413595) | Cod sursa (job #480913) | Cod sursa (job #1507982)
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <queue>
#define NMAX 100008
#define inclus(a, b, c, d) ((a) >= (c) && (b) <= (d))
using namespace std;
int n, k;
int arb[4*NMAX];
int index, x; /// for type 1
int st, dr; /// for type 0
int maxi;
void update(int pos, int l, int r)
{
int mid = (l+r)/2;
if (l == r){
arb[pos] = x;
return;
}
if (index <= mid)
update(pos*2, l, mid);
else
update(pos*2+1, mid+1, r);
arb[pos] = max(arb[pos*2], arb[pos*2+1]);
}
void determineMax(int pos, int l, int r)
{
if (st <= l && r <= dr){
maxi = max(maxi, arb[pos]);
return;
}
int mid = (l + r) / 2;
if (st <= mid)
determineMax(pos*2, l, mid);
if (dr > mid)
determineMax(pos*2+1, mid+1, r);
}
void readData()
{
scanf("%d %d\n", &n, &k);
for (index = 1; index <= n; ++index){
scanf("%d ", &x);
update(1, 1, n);
}
}
void readQueries()
{
int type, arg1, arg2;
for (int i = 0; i < k; ++i){
scanf("%d %d %d\n", &type, &arg1, &arg2);
if (type == 0){
st = arg1;
dr = arg2;
maxi = -1;
determineMax(1, 1, n);
printf("%d\n", maxi);
}
else if (type == 1){
index = arg1;
x = arg2;
update(1, 1, n);
}
}
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
readData();
readQueries();
return 0;
}