Pagini recente » Cod sursa (job #599377) | Cod sursa (job #1205379) | Cod sursa (job #905919) | Cod sursa (job #1902239) | Cod sursa (job #3249603)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
const int NMAX = 1e5;
const int INT_MIN = 0;
const int SQRTNMAX = 317;
int n, q, sqrtn, nrbuckets;
int buckets[SQRTNMAX + 2][SQRTNMAX + 2];
int max_interv[SQRTNMAX + 2];
void citire(){
cin >> n >> q;
sqrtn = sqrt(n);
/*nrbuckets = sqrtn;
if (sqrtn * sqrtn != n)
++nrbuckets;
buckets.resize(nrbuckets + 2); // fiindca folosim indexare de la 1
*/
for (int i = 1; i <= n; ++i){
cin >> buckets[(i - 1) / sqrtn + 1][(i - 1) % sqrtn + 1];
}
}
void update_interv(int ind){
max_interv[ind] = INT_MIN;
for (int i = 0; i < sqrtn; ++i){
if (buckets[ind][i] > max_interv[ind])
max_interv[ind] = buckets[ind][i];
}
}
void update_pos(int pos, int val){
int ind_bucket = (pos - 1) / sqrtn + 1;
buckets[ind_bucket][(pos - 1) % sqrtn] = val;
update_interv(ind_bucket);
}
int query(int l, int r){
int ans = INT_MIN;
for (int i = l; i <= r; ++i){
int ind_bucket = (i - 1) / sqrtn + 1;
int pos_in_bucket = (i - 1) % sqrtn;
if (pos_in_bucket == 0 and i + sqrtn <= r){
if (max_interv[ind_bucket] > ans)
ans = max_interv[ind_bucket];
i += sqrtn - 1;
} else {
if (buckets[ind_bucket][pos_in_bucket] > ans)
ans = buckets[ind_bucket][pos_in_bucket];
}
}
return ans;
}
void init(){
//max_interv.resize(nrbuckets + 1);
for (int i = 1; i <= nrbuckets; ++i){
update_interv(i);
}
}
void rezolvare(){
for (int i = 1; i <= q; ++i){
bool op;
int a,b;
cin >> op >> a >> b;
if (op == 0){
cout << query(a, b) << '\n';
} else update_pos(a, b);
}
}
int main(){
citire();
init();
rezolvare();
return 0;
}