답안 #673366

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
673366 2022-12-20T11:43:29 Z smartmonky 원숭이와 사과 나무 (IZhO12_apple) C++14
0 / 100
547 ms 262144 KB
#include <bits/stdc++.h>

#define ff first
#define ss second
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define int long long

using namespace std;

void fp(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
const int n = 1e9 + 5;
struct node{
    int sum = 0;
    short flag = 0;
    node *l, *r;
    node(){
        sum = 0, flag = 0;
        l = nullptr;
        r = nullptr;
    }
};
void push(node *&p,int l,int r){
	if(l != r && p ->flag){
		int mid = (l + r) >> 1;
		p -> l -> flag = 1;
		p -> r -> flag = 1;
		p -> l -> sum = (mid - l + 1);
		p -> r -> sum = (r - (mid + 1) + 1); 
	}
	p -> flag = 0;
}
void update(node *&p, int l, int r, int tl = 1, int tr = n){
    if(p == nullptr){
        p = new node();
    }
    if(tl > r || tr < l)
        return;
    if(tl >= l && tr <= r){
        p -> sum = (tr - tl + 1);
        p -> flag = 1;
        if(p -> l == nullptr)p -> l = new node();
		if(p -> r == nullptr)p -> r = new node();
        push(p, tl, tr);
        return;
    }
    int mid = (tl + tr) >> 1;
	update(p -> r, l, r, mid + 1, tr);
	update(p -> l, l, r, tl, mid);
	if(p -> l == nullptr)p -> l = new node();
	if(p -> r == nullptr)p -> r = new node();
    push(p, tl, tr);
    p -> sum = p -> l -> sum + p -> r -> sum;
}
int get(node *&p, int l, int r, int tl = 1, int tr = n){
	if(p == nullptr){
        p = new node();
    }
    if(p -> l == nullptr)p -> l = new node();
	if(p -> r == nullptr)p -> r = new node();
	push(p, tl, tr);
    if(tl > r || tr < l)
        return 0;
    if(tl >= l && tr <= r)
        return p -> sum;
    push(p, tl, tr);
    int mid = (tl + tr) >> 1;
    return get(p -> r, l, r, mid + 1, tr) + get(p -> l, l, r, tl, mid);
}

main(){
    node *root = new node();
    int n;
    cin >> n;
    int dob = 0;
    for(int i = 0; i < n; i++){
		int t, l, r;
		cin >> t >> l >> r;
		if(t == 2){
			update(root, l + dob, r + dob);
		}else{
			int ans = get(root, l + dob, r + dob);
			cout <<ans <<  endl;
			dob = ans;
		}
	}
}

Compilation message

apple.cpp:72:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   72 | main(){
      | ^~~~
apple.cpp: In function 'void fp(std::string)':
apple.cpp:12:29: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 | void fp(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:12:70: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 | void fp(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                                                               ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 29 ms 8276 KB Output is correct
5 Correct 33 ms 10116 KB Output is correct
6 Correct 35 ms 9692 KB Output is correct
7 Correct 42 ms 10040 KB Output is correct
8 Correct 222 ms 76912 KB Output is correct
9 Correct 481 ms 133144 KB Output is correct
10 Correct 503 ms 147248 KB Output is correct
11 Correct 547 ms 158284 KB Output is correct
12 Correct 535 ms 163088 KB Output is correct
13 Correct 517 ms 189516 KB Output is correct
14 Correct 496 ms 190664 KB Output is correct
15 Runtime error 521 ms 262144 KB Execution killed with signal 9
16 Halted 0 ms 0 KB -