제출 #531279

#제출 시각아이디문제언어결과실행 시간메모리
531279dreadarceus원숭이와 사과 나무 (IZhO12_apple)C++17
0 / 100
400 ms262148 KiB
#include <bits/stdc++.h> using namespace std; #define int long long class DynamicSegTree { struct DSegTreeItem { int val, lazy; DSegTreeItem *l, *r; }; public: DynamicSegTree(int n) { this->nodes.resize(1e7 + 1); this->size = n; this->last = 0; this->make_new(); } void rangeUpdate(int x, int y, DSegTreeItem *cur, int l, int r) { dynamics(cur); if (cur->lazy) propagateLazy(cur, l, r); if (y <= l || x >= r) return; if (l >= x && r <= y) { cur->lazy = 1; propagateLazy(cur, l, r); return; } rangeUpdate(x, y, cur->l, l, (r + l) / 2); rangeUpdate(x, y, cur->r, (r + l) / 2, r); cur->val = cur->l->val + cur->r->val; } int query(int x, int y, DSegTreeItem *cur, int l, int r) { dynamics(cur); if (cur->lazy) propagateLazy(cur, l, r); if (y <= l || x >= r) return 0; if (l >= x && r <= y) return cur->val; return query(x, y, cur->l, l, (r + l) / 2) + query(x, y, cur->r, (r + l) / 2, r); } void rangeUpdate(int x, int y) { rangeUpdate(x, y, nodes[0], 0, size); } int query(int x, int y) { return query(x, y, nodes[0], 0, size); } private: int size, last; vector<DSegTreeItem *> nodes; DSegTreeItem *make_new() { DSegTreeItem *nx = new DSegTreeItem({0, 0, nullptr, nullptr}); assert(last < nodes.size()); nodes[last] = nx; return nodes[last++]; } void dynamics(DSegTreeItem *cur) { if (cur->l == nullptr) cur->l = make_new(); if (cur->r == nullptr) cur->r = make_new(); } void propagateLazy(DSegTreeItem *cur, int l, int r) { if (l != r - 1) { cur->l->lazy = 1; cur->r->lazy = 1; } cur->val = r - l; cur->lazy = 0; } }; void solveCase() { int m = 0; cin >> m; DynamicSegTree dst(1e9 + 1); int c = 0; while (m--) { int d = 0, x = 0, y = 0; cin >> d >> x >> y; if (d == 1) c = dst.query(x + c, y + c + 1), cout << c << '\n'; else dst.rangeUpdate(x + c, y + c + 1); } } int32_t main() { mt19937 rng((unsigned int)chrono::steady_clock::now().time_since_epoch().count()); if (rng() % 100000 == 0) assert(false); ios::sync_with_stdio(false), cin.tie(NULL); solveCase(); }

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

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from apple.cpp:1:
apple.cpp: In member function 'DynamicSegTree::DSegTreeItem* DynamicSegTree::make_new()':
apple.cpp:64:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<DynamicSegTree::DSegTreeItem*>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |         assert(last < nodes.size());
      |                ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...