Pagini recente » Cod sursa (job #3148477) | Cod sursa (job #2867739) | Cod sursa (job #3292657) | Cod sursa (job #1137841) | Cod sursa (job #3290342)
#include <fstream>
#include <queue>
#include <vector>
#include <bitset>
#include <unordered_map>
#include <climits>
#include <cmath>
#include <algorithm>
#pragma GCC optimize("O3,Ofast,unroll-loops")
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int NMAX = 2e5+5;
int Tree[NMAX],n;
void Build() {
for (int i=n; i<n*2; i++) {
cin>>Tree[i];
}
for (int i=n-1; i>0; i--) {
Tree[i] = max(Tree[i*2],Tree[i*2+1]);
}
}
void Update(int i,int val) {
i += n;
Tree[i] = val;
while (i > 1) {
i /= 2;
Tree[i] = max(Tree[i*2],Tree[i*2+1]);
}
}
int querry(int i,int j) {
i += n;
j += n;
int rez = INT_MIN;
while (i < j) {
if (i%2 == 1) {
rez = max(rez,Tree[i]);
i++;
}
if (j%2 == 1) {
j--;
rez = max(rez,Tree[j]);
}
i /= 2;
j /= 2;
}
return rez;
}
int main() {
int k;
cin>>n>>k;
Build();
for (int i=0; i<k; i++) {
int a,b,c;
cin>>a>>b>>c;
if (a == 1) {
Update(b-1,c);
}
else {
cout<<querry(b-1,c)<<"\n";
}
}
}