제출 #886477

#제출 시각아이디문제언어결과실행 시간메모리
886477boris_mihovMoney (IZhO17_money)C++17
0 / 100
1 ms6492 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <bitset> #include <vector> #include <stack> typedef long long llong; const int MAXN = 1000000 + 10; int n; int a[MAXN]; int b[MAXN]; int prev[MAXN]; bool endHere[MAXN]; std::stack <int> st; void solve() { std::iota(b + 1, b + 1 + n, 1); std::sort(b + 1, b + 1 + n, [&](int x, int y) { return a[x] < a[y] || (a[x] == a[y] & x < y); }); for (int i = 1 ; i <= n ; ++i) { a[b[i]] = i; } for (int i = 1 ; i <= n ; ++i) { while (st.size() && a[st.top()] > a[i]) { st.pop(); } if (st.size()) { prev[i] = st.top(); } st.push(i); } int ans = n; for (int i = 1 ; i <= n ; ++i) { endHere[b[i]] = true; // std::cout << "here: " << b[i] << ' ' << a[b[i]] << ' ' << prev[b[i]] << ' ' << endHere[prev[b[i]]] << ' ' << i - (n - ans + endHere[prev[b[i]]]) << '\n'; if (endHere[prev[b[i]]]) { ans--; endHere[prev[b[i]]] = false; } } std::cout << ans << '\n'; } void input() { std::cin >> n; for (int i = 1 ; i <= n ; ++i) { std::cin >> a[i]; } } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); return 0; } /* 8 7 6 8 1 5 2 4 3 7 | 5 7 | 1 4 | 1 2 | 1 1 | 1 |1 2| 4 | 5 7 | 7 7 5 7 1 4 1 2 1 5 7 | 5 7 | 1 5 2 4 3 */

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

money.cpp: In lambda function:
money.cpp:24:37: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   24 |         return a[x] < a[y] || (a[x] == a[y] & x < y);
      |                                ~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...