Pagini recente » Cod sursa (job #697484) | Cod sursa (job #2593438) | Cod sursa (job #1886158) | Cod sursa (job #812154) | Cod sursa (job #2197178)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define INF 1000000005
#define LINF 1000000000000000005
#define MAXN 1000005
#define pi pair<int,int>
#define pl pair<ll,ll>
int n,m,nr;
int tree[MAXN];
int maxim(int a, int b){
a += nr-1, b += nr-1;
int maxx=0;
while (a <= b){
if (a%2) maxx = max(maxx,tree[a++]);
if (!(b%2)) maxx = max(maxx,tree[b--]);
a /= 2, b /= 2;
}
return maxx;
}
void edit(int k, int x){
k += nr-1;
tree[k] = x;
for (k /= 2; k >= 1; k /= 2)
tree[k] = max(tree[2*k],tree[2*k+1]);
}
int main() {
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin >> n >> m;
nr = 1 << ((int)log2(n) + 1);
for (int i = 0; i < n; i++)
fin >> tree[i+nr];
for (int i = nr-1; i > 0; i--)
tree[i] = max(tree[2*i],tree[2*i+1]);
for (int i = 1; i <= m; i++){
int v,x,y;
fin >> v >> x >> y;
if (!v) fout << maxim(x,y);
else edit(x,y);
}
}