답안 #577926

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
577926 2022-06-15T13:14:26 Z KindaNameless 원숭이와 사과 나무 (IZhO12_apple) C++14
0 / 100
1 ms 212 KB
#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){
        if(r < L || R < l){
            return;
        }
        if(l <= L && R <= r){
            lazy = 1;
            push();
            //cout << "seg : " << L << " " << R << ", sum : " << sum << "\n";
            return;
        }
        push();
        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){
        if(r < L || R < l){
            return 0;
        }
        if(l <= L && R <= r){
            //cout << "seg : " << L << " " << R << ", sum : " << sum << "\n";
            push();
            return sum;
        }
        push();
        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 << 30) - 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

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:73:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   73 |         int mid = L + R >> 1;
      |                   ~~^~~
apple.cpp:73:13: warning: unused variable 'mid' [-Wunused-variable]
   73 |         int mid = L + R >> 1;
      |             ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 1 ms 212 KB Output isn't correct
4 Halted 0 ms 0 KB -