Pagini recente » Cod sursa (job #2674413) | Cod sursa (job #917306) | Cod sursa (job #233293) | Cod sursa (job #1210928) | Cod sursa (job #1212527)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
#define nmax 100001
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,i,j,MAX,a,b,k;
bool tip;
int A[nmax],SQ[nmax];
void citire() {
in >> n >> m;
k = sqrt(n) + 1;
for (i=1; i<=n; i++){
in >> A[i];
if (i%k == 0)
SQ[++j] = MAX,
MAX = 0;
else
MAX = max(MAX, A[i]);
}
}
void update(int i, int val) {
SQ[(i-1)/k + 1] = max(SQ[(i-1)/k + 1], val);
A[i] = val;
}
int value(int st, int dr) {
int Max = -1;
int lo = (st-1)/k + 1;
int hi = (dr-1)/k + 1;
for (int i=st; i<=lo*k; i++)
Max = max(Max, A[i]);
for (int i=lo+1; i<=hi-1; i++)
Max = max(Max, SQ[i]);
for (int i=hi*k; i<=dr; i++)
Max = max(Max, A[i]);
return Max;
}
void rezolvare() {
for (i=1; i<=m; i++) {
in >> tip;
if (!tip) {
in >> a >> b;
out << value(a, b) << "\n";
} else {
in >> a >> b;
update(a, b);
}
}
}
int main() {
citire();
rezolvare();
return 0;
}