제출 #21879

#제출 시각아이디문제언어결과실행 시간메모리
21879ulna원숭이와 사과 나무 (IZhO12_apple)C++11
100 / 100
466 ms138244 KiB
#include <bits/stdc++.h>
using namespace std;

// why am I so weak

int m;

struct node {
	int sum;
	int lazy;
	node *left, *right;

	node(int sum) : sum(sum), lazy(-1) {left = right = NULL;}
} *root = new node(0);

void push(node *u, int x, int y) {
	if (u->lazy < 0) return;

	int mid = (x + y) >> 1;

	u->left->lazy = u->right->lazy = 1;

	u->left->sum = mid - x + 1;
	u->right->sum = y - mid;

	u->lazy = -1;
}
int query(node *u, int x, int y, int l, int r) {
	if (!u) return 0;
	if (l > y || r < x) return 0;

	if (l <= x && y <= r) return u->sum;

	int mid = (x + y) >> 1;

	if (!u->left) u->left = new node(0);
	if (!u->right) u->right = new node(0);

	push(u, x, y);

	return query(u->left, x, mid, l, r) + query(u->right, mid + 1, y, l, r);
}
void update(node *u, int x, int y, int l, int r) {
	if (l > y || r < x) return;

	if (l <= x && y <= r) {
		u->sum = y - x + 1;
		u->lazy = 1;
		return;
	}

	int mid = (x + y) >> 1;

	if (!u->left) u->left = new node(0);
	if (!u->right) u->right = new node(0);

	push(u, x, y);

	update(u->left, x, mid, l, r);
	update(u->right, mid + 1, y, l, r);

	u->sum = u->left->sum + u->right->sum;
}
int main() {
	scanf("%d", &m);

	int c = 0;

	while (m--) {
		int ope, x, y;
		scanf("%d %d %d", &ope, &x, &y);
		x += c, y += c;

		if (ope == 1) {
			printf("%d\n", c = query(root, 1, (int)1e9, x, y));
		} else {
			update(root, 1, (int)1e9, x, y);
		}
	}

	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

apple.cpp: In function 'int main()':
apple.cpp:65:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &m);
                 ^
apple.cpp:71:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d", &ope, &x, &y);
                                  ^
#Verdict Execution timeMemoryGrader output
Fetching results...