제출 #643533

#제출 시각아이디문제언어결과실행 시간메모리
643533AlexandruabcdeHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
0 / 100
517 ms262144 KiB
#include <bits/stdc++.h> using namespace std; constexpr int NMAX = 1e6; typedef pair <int, int> PII; struct Node { Node *Left, *Right; vector <int> Order; int Max; int Worst; Node () { Left = Right = nullptr; Order = {}; Max = 0; Worst = 0; } }; int N, M; int W[NMAX + 5]; Node* Tree; void Init (Node *Tree, int a, int b) { if (a == b) { Tree->Order.push_back(W[a]); return; } int mij = (a + b) / 2; Tree->Left = new Node; Tree->Right = new Node; Init(Tree->Left, a, mij); Init(Tree->Right, mij+1, b); int i = 0, j = 0; while (i < Tree->Left->Order.size() && j < Tree->Right->Order.size()) { if (Tree->Left->Order[i] > Tree->Right->Order[j]) { Tree->Worst = Tree->Left->Order[i] + Tree->Right->Order[j]; Tree->Order.push_back(Tree->Right->Order[j]); ++ j; } else { Tree->Order.push_back(Tree->Left->Order[i]); ++ i; } } while (i < Tree->Left->Order.size()) { Tree->Order.push_back(Tree->Left->Order[i]); Tree->Worst = Tree->Left->Order[i] + Tree->Right->Order.back(); ++ i; } while (j < Tree->Right->Order.size()) { Tree->Order.push_back(Tree->Right->Order[j]); ++ j; } Tree->Worst = max(Tree->Worst, max(Tree->Left->Worst, Tree->Right->Worst)); Tree->Max = Tree->Order.back(); } void Answer (Node *Tree, int a, int b, int qa, int qb, int &answer, int &Maximum) { if (qa <= a && b <= qb) { answer = max(answer, Tree->Worst); auto it = upper_bound(Tree->Order.begin(), Tree->Order.end(), Maximum); if (it != Tree->Order.begin()) { it = prev(it); answer = max(answer, (*it) + Maximum); } Maximum = max(Maximum, Tree->Order.back()); return; } int mij = (a + b) / 2; if (qa <= mij) Answer(Tree->Left, a, mij, qa, qb, answer, Maximum); if (mij < qb) Answer(Tree->Right, mij+1, b, qa, qb, answer, Maximum); } void Read () { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> M; for (int i = 1; i <= N; ++ i ) cin >> W[i]; } int ans = 0, Max = 0; void Solve () { Tree = new Node; Init(Tree, 1, N); for (int i = 1; i <= M; ++ i ) { int l, r, k; cin >> l >> r >> k; ans = Max = 0; Answer(Tree, 1, N, l, r, ans, Max); if (ans > k) cout << 0 << '\n'; else cout << 1 << '\n'; } } int main () { Read(); Solve(); return 0; }

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

sortbooks.cpp: In function 'void Init(Node*, int, int)':
sortbooks.cpp:45:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     while (i < Tree->Left->Order.size() && j < Tree->Right->Order.size()) {
      |            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:45:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     while (i < Tree->Left->Order.size() && j < Tree->Right->Order.size()) {
      |                                            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:60:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     while (i < Tree->Left->Order.size()) {
      |            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:68:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     while (j < Tree->Right->Order.size()) {
      |            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...