답안 #577928

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
577928 2022-06-15T13:16:50 Z KindaNameless 원숭이와 사과 나무 (IZhO12_apple) C++14
0 / 100
420 ms 262144 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){
        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;
        }
        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::upd(int, int)':
apple.cpp:57:13: warning: unused variable 'mid' [-Wunused-variable]
   57 |         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 Correct 0 ms 212 KB Output is correct
4 Correct 20 ms 8300 KB Output is correct
5 Correct 23 ms 9948 KB Output is correct
6 Correct 22 ms 9592 KB Output is correct
7 Correct 24 ms 9968 KB Output is correct
8 Correct 165 ms 74044 KB Output is correct
9 Correct 361 ms 131028 KB Output is correct
10 Correct 350 ms 141460 KB Output is correct
11 Correct 407 ms 153540 KB Output is correct
12 Correct 383 ms 158760 KB Output is correct
13 Correct 378 ms 200676 KB Output is correct
14 Correct 420 ms 202672 KB Output is correct
15 Runtime error 402 ms 262144 KB Execution killed with signal 9
16 Halted 0 ms 0 KB -