제출 #314296

#제출 시각아이디문제언어결과실행 시간메모리
314296dolphingarlic사다리꼴 (balkan11_trapezoid)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; const int MOD = 30013; struct Trapezoid { int x1, x2, y1, y2; } traps[100001]; int n, top[200001], bottom[200001]; int l_len[200001], l_num[200001]; pair<int, int> events[200001]; vector<pair<int, int>> s; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> traps[i].x1 >> traps[i].x2 >> traps[i].y1 >> traps[i].y2; top[2 * i - 1] = traps[i].x1, top[2 * i] = traps[i].x2; bottom[2 * i - 1] = traps[i].y1, bottom[2 * i] = traps[i].y2; } sort(top + 1, top + 2 * n + 1); sort(bottom + 1, bottom + 2 * n + 1); for (int i = 1; i <= n; i++) { traps[i].x1 = lower_bound(top + 1, top + 2 * n + 1, traps[i].x1) - top; traps[i].x2 = lower_bound(top + 1, top + 2 * n + 1, traps[i].x2) - top; traps[i].y1 = lower_bound(bottom + 1, bottom + 2 * n + 1, traps[i].y1) - bottom; traps[i].y2 = lower_bound(bottom + 1, bottom + 2 * n + 1, traps[i].y2) - bottom; } for (int i = 1; i <= n; i++) { events[2 * i - 1] = {traps[i].x1, i}; events[2 * i] = {traps[i].x2, -i}; } sort(events + 1, events + 2 * n + 1); int b_len = 0, b_num = 0; for (int i = 1; i <= 2 * n; i++) { if (events[i].second > 0) { int lis = lower_bound(s.begin(), s.end(), {traps[events[i].second].y1, 0}) - s.begin(); if (!lis) l_len[events[i].second] = l_num[events[i].second] = 1; else l_len[events[i].second] = lis, l_num[events[i].second] = s[lis - 1].second; if (lis > b_len) { b_len = lis; b_num = 0; } if (lis == b_len) b_num = (b_num + s[lis - 1].second) % MOD; } else { if (l_len[-events[i].second] == s.size()) s.push_back({traps[-events[i].second].y2, l_num[-events[i].second]}); else { int len = l_len[-events[i].second]; s[len] = {min(traps[-events[i].second].y2, s[len].first), (s[len].second + l_num[-events[i].second]) % MOD}; } } } cout << b_len << ' ' << b_num; return 0; }

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

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:44:86: error: no matching function for call to 'lower_bound(std::vector<std::pair<int, int> >::iterator, std::vector<std::pair<int, int> >::iterator, <brace-enclosed initializer list>)'
   44 |             int lis = lower_bound(s.begin(), s.end(), {traps[events[i].second].y1, 0}) - s.begin();
      |                                                                                      ^
In file included from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/ios:40,
                 from /usr/include/c++/9/istream:38,
                 from /usr/include/c++/9/sstream:38,
                 from /usr/include/c++/9/complex:45,
                 from /usr/include/c++/9/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:54,
                 from trapezoid.cpp:1:
/usr/include/c++/9/bits/stl_algobase.h:1004:5: note: candidate: 'template<class _ForwardIterator, class _Tp> _ForwardIterator std::lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&)'
 1004 |     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
      |     ^~~~~~~~~~~
/usr/include/c++/9/bits/stl_algobase.h:1004:5: note:   template argument deduction/substitution failed:
trapezoid.cpp:44:86: note:   couldn't deduce template parameter '_Tp'
   44 |             int lis = lower_bound(s.begin(), s.end(), {traps[events[i].second].y1, 0}) - s.begin();
      |                                                                                      ^
In file included from /usr/include/c++/9/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:65,
                 from trapezoid.cpp:1:
/usr/include/c++/9/bits/stl_algo.h:2022:5: note: candidate: 'template<class _FIter, class _Tp, class _Compare> _FIter std::lower_bound(_FIter, _FIter, const _Tp&, _Compare)'
 2022 |     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
      |     ^~~~~~~~~~~
/usr/include/c++/9/bits/stl_algo.h:2022:5: note:   template argument deduction/substitution failed:
trapezoid.cpp:44:86: note:   candidate expects 4 arguments, 3 provided
   44 |             int lis = lower_bound(s.begin(), s.end(), {traps[events[i].second].y1, 0}) - s.begin();
      |                                                                                      ^
trapezoid.cpp:53:42: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |             if (l_len[-events[i].second] == s.size()) s.push_back({traps[-events[i].second].y2, l_num[-events[i].second]});
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~