Pagini recente » Cod sursa (job #504705) | Diferente pentru preoji/clasament/11-12 intre reviziile 12 si 21 | Istoria paginii utilizator/florinandrus | Profil RazvanNasca | Cod sursa (job #1605664)
#include <fstream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
class arbint{
int n;
vector<int> buf;
public:
arbint(const vector<int>& v): n(v.size()), buf(2*n, 0){
copy(v.begin(), v.end(), buf.begin()+n);
for(int i = n-1; i > 0; --i){
buf[i] = max(buf[2*i], buf[2*i+1]);
}
}
void update(int p, const int v){
buf[p+=n] = v;
for(p /= 2; p > 0; p /= 2){
buf[p] = max(buf[2*p], buf[2*p+1]);
}
}
int query(int st, int dr){
int rez = -1;
for(st += n, dr += n+1; st < dr; st /= 2, dr /= 2){
if(st%2 == 1){
rez = max(rez, buf[st++]);
}
if(dr%2 == 1){
rez = max(rez, buf[--dr]);
}
}
return rez;
}
};
int main(){
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
f >> n >> m;
vector<int> v(n);
for(int i = 0; i < n; ++i){
f >> v[i];
}
arbint ai(v);
for(int i = 0, t, a, b; i < m; ++i){
f >> t >> a >> b;
if(t == 0){
g << ai.query(a-1, b-1) << '\n';
}
else{
ai.update(a-1, b);
}
}
return 0;
}