Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- typedef long long ll;
- vector<ll> b;
- vector<ll> a;
- ll curi = 0;
- ll sum(ll lb, ll rb, ll l, ll r, ll v){
- if(lb == l && rb == r){
- return b[v];
- }
- if(l <= (lb + rb)/2 && r >= (lb + rb)/2 + 1){
- return max(sum(lb,(lb + rb)/2, l, (lb + rb)/2, 2 * v),sum((lb + rb)/2 + 1,rb, (lb + rb)/2 + 1, r, 2 * v + 1));
- }else if(l <= (lb + rb) / 2){
- return sum(lb,(lb + rb)/2, l, r, 2 * v);
- }else{
- return sum((lb + rb)/2 + 1,rb, l, r, 2 * v + 1);
- }
- }
- ll changeEl(ll lb, ll rb, ll which, ll to, ll v){
- if(lb == rb){
- b[v] += to;
- return b[v];
- }
- if(which >= lb && which <= (lb + rb)/2){
- b[v] = max(changeEl(lb,(lb + rb)/2,which,to,2*v),b[2*v + 1]);
- return b[v];
- }else{
- b[v] = max(changeEl((lb + rb)/2 + 1, rb ,which,to,2*v + 1),b[2*v]);
- return b[v];
- }
- }
- ll fill(ll lb, ll rb, ll v){
- if(lb == rb){
- b[v] = a[curi];
- curi++;
- return b[v];
- }
- b[v] = max(fill(lb, (lb+rb)/2, 2*v),fill((lb+rb)/2 + 1, rb, 2*v + 1));
- return b[v];
- }
- int main()
- {
- ll n,k;
- cin >> n >> k;
- a.resize(n);
- b.resize(4*n + 1);
- for(ll i = 0; i < n; i++){
- cin >> a[i];
- }
- fill(0,a.size()-1, 1);
- for(ll i = 0; i < k; i++){
- ll x,y,z;
- cin >> x;
- if(x == 1){
- cin >> y >> z;
- changeEl(0, a.size() - 1, y-1, z, 1);
- }
- if(x == 2){
- cin >> y;
- cout << sum(0,a.size() - 1, 0, y-1, 1) << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement