Submission #577938

#TimeUsernameProblemLanguageResultExecution timeMemory
577938KindaNameless원숭이와 사과 나무 (IZhO12_apple)C++14
0 / 100
435 ms262144 KiB
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<numeric>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<stack>
#include<deque>
#include<cmath>
#include<map>
#include<set>
using namespace std;
 
#define ll long long
#define ld long double
 
struct Node{
    int sum = 0, lazy = -1, L, R;
    Node *left_child = nullptr, *right_child = nullptr;
 
    Node(int _l, int _r){
        L = _l; R = _r;
    }
 
    void extend(){
        if(!left_child && L != R){
            int mid = L + R >> 1;
            left_child = new Node(L, mid);
            right_child = new Node(mid+1, R);
        }
    }
 
    void push(){
        extend();
        sum = (lazy == -1 ? sum : (R - L + 1));
        if(L != R){
            left_child->lazy = (lazy == -1 ? left_child->lazy : lazy);
            right_child->lazy = (lazy == -1 ? right_child->lazy : lazy);
        }
        lazy = -1;
    }
 
    void upd(int l, int r){
        push();
        if(r < L || R < l){
            return;
        }
        if(l <= L && R <= r){
            lazy = 1;
            push();
            //cout << "seg : " << L << " " << R << ", sum : " << sum << "\n";
            return;
        }
        int mid = L + R >> 1;
        left_child->upd(l, r);
        right_child->upd(l, r);
        sum = left_child->sum + right_child->sum;
    }
 
    int query(int l, int r){
        push();
        if(r < L || R < l){
            return 0;
        }
        if(l <= L && R <= r){
            //cout << "seg : " << L << " " << R << ", sum : " << sum << "\n";
            return sum;
        }
        int mid = L + R >> 1;
        return left_child->query(l, r) + right_child->query(l, r);
    }
};
 
int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
 
    int LIM = (1 << 31) - 1;
 
    Node *ST = new Node(0, LIM);
 
    int M; cin >> M;
 
    int c = 0;
    while(M--){
        int d, x, y; cin >> d >> x >> y; x--; y--;
        if(d == 1){
            c = ST->query(x + c, y + c);
            cout << c << "\n";
        }
        else{
            ST->upd(x + c, y + c);
        }
    }
 
    return 0;
}

Compilation message (stderr)

apple.cpp: In member function 'void Node::extend()':
apple.cpp:30:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   30 |             int mid = L + R >> 1;
      |                       ~~^~~
apple.cpp: In member function 'void Node::upd(int, int)':
apple.cpp:57:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   57 |         int mid = L + R >> 1;
      |                   ~~^~~
apple.cpp:57:13: warning: unused variable 'mid' [-Wunused-variable]
   57 |         int mid = L + R >> 1;
      |             ^~~
apple.cpp: In member function 'int Node::query(int, int)':
apple.cpp:72:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   72 |         int mid = L + R >> 1;
      |                   ~~^~~
apple.cpp:72:13: warning: unused variable 'mid' [-Wunused-variable]
   72 |         int mid = L + R >> 1;
      |             ^~~
apple.cpp: In function 'int main()':
apple.cpp:80:25: warning: integer overflow in expression of type 'int' results in '2147483647' [-Woverflow]
   80 |     int LIM = (1 << 31) - 1;
      |               ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...