답안 #853252

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
853252 2023-09-23T18:34:46 Z serifefedartar 원숭이와 사과 나무 (IZhO12_apple) C++17
0 / 100
0 ms 344 KB
#include <bits/stdc++.h>
using namespace std;
 
#define fast ios::sync_with_stdio(0);cin.tie(0);
#define s second
#define f first
typedef long long ll;
const ll MOD = 1e9 + 7;
const ll LOGN = 20;
const ll MAXN = 2e5 + 5;

struct Node {
	int l, r, sum, lazy;
	Node *ptrL, *ptrR;

	Node(int a, int b) : l(a), r(b), sum(0), lazy(0), ptrL(NULL), ptrR(NULL) { };
	void add() {
		if (ptrL == NULL && l != r) {
			int mid = (l + r) / 2;
			ptrL = new Node(l, mid);
			ptrR = new Node(mid+1, r);
		}
	}

	void push() {
		if (lazy) {
			sum = r - l + 1;
			if (l != r) {
				add();
				ptrL->lazy = 1;
				ptrR->lazy = 1;
			}
			lazy = 0;
		}
	}

	void update(int a, int b) {
		push();
		if (l > b || a > r)
			return ;
		if (a <= l && r <= b) {
			lazy = 1;
			push();
			return ;
		}
		add();
		
		if (ptrL->r >= b)
			ptrL->update(a, b);

		if (ptrR->l <= a)
			ptrR->update(a, b);
		sum = ptrL->sum + ptrR->sum; 
	}

	int query(int a, int b) {
		push();
		if (l > b || a > r)
			return 0;
		if (a <= l && r <= b)
			return sum;
		return (ptrL ? ptrL->query(a, b) : 0) + (ptrR ? ptrR->query(a, b) : 0);
	}
};

int main() {
	fast
	int M, D, X, Y;
	cin >> M;

	Node *root = new Node(1, 1e9);
	int C = 0;
	while (M--) {
		cin >> D >> X >> Y;
		X += C, Y += C;
		if (D == 1) {
			C = root->query(X, Y);
			cout << C << "\n";
		} else
			root->update(X, Y);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -