제출 #811856

#제출 시각아이디문제언어결과실행 시간메모리
811856vjudge1Financial Report (JOI21_financial)C++17
5 / 100
1405 ms973816 KiB
#ifdef Home #define _GLIBCXX_DEBUG #endif // Home #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int N = 300300; int dp[N], arr[N]; struct SlideWin{ stack < int > L, R, S; void add(int x) { R.push(max(R.empty() ? 0 : R.top(), x)); S.push(x); } void del() { if(L.empty()) { for(; !S.empty();) { L.push(max(L.empty() ? 0 : L.top(), S.top())); S.pop(); R.pop(); } } L.pop(); } int get_max() { return max(L.empty() ? 0 : L.top(), R.empty() ? 0 : R.top()); } }; map < int, SlideWin > mp; struct node{ int l, r, mx = 0; node *left = NULL, *right = NULL; node(int _l, int _r):l(_l), r(_r) {}; }; void check(node *x) { if(x->left == NULL) { x->left = new node(x->l, (x->l + x->r) / 2); } if(x->right == NULL) { x->right = new node((x->l + x->r) / 2, x->r); } } void update(int pos, node *x) { if(x->l + 1 == x->r) { x->mx = mp[x->l].get_max(); return; } check(x); pos < x->left->r ? update(pos, x->left) : update(pos, x->right) ; x->mx = max(x->left->mx, x->right->mx); } int get(int r, node *x) { if(x->r <= r || x->mx == 0) { return x->mx; } check(x); int res = get(r, x->left); if(x->right->l < r) { res = max(res, get(r, x->right)); } return res; } main() { #ifdef Home freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif // Home ios_base::sync_with_stdio(0); cin.tie(0); int n, m, d; cin >> n >> d; //stack < int > st; node *root = new node(0, (1<<30)); for(int i = 1; i <= n; ++ i) { cin >> arr[i]; if(i > d + 1) { mp[arr[i - d - 1]].del(); update(arr[i - d - 1], root); } dp[i] = get(arr[i], root) + 1; //for(; !st.empty() && arr[st.top()] <= arr[i]; st.pop()) { // dp[i] = max(dp[i], dp[st.top()] + (arr[st.top()] < arr[i])); //} //st.push(i); mp[arr[i]].add(dp[i]); update(arr[i], root); } int mx = n, ans = dp[n]; for(int i = n; i --> 1;) { if(arr[i] >= arr[mx]) { ans = max(ans, dp[i]); mx = i; } } cout << ans; }

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

Main.cpp:84:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   84 | main() {
      | ^~~~
Main.cpp: In function 'int main()':
Main.cpp:92:12: warning: unused variable 'm' [-Wunused-variable]
   92 |     int n, m, d;
      |            ^
#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...