제출 #370592

#제출 시각아이디문제언어결과실행 시간메모리
370592SeanliuBigger segments (IZhO19_segments)C++17
0 / 100
161 ms262148 KiB
#include <iostream> #include <utility> #include <algorithm> #include <deque> #define pii pair<int,int> #define F first #define S second #define int long long int using namespace std; const int maxN = 5e5 + 326; int N, arr[maxN]; deque<pii> dandiao[maxN]; signed main(){ cin >> N; for(int i = 1; i <= N; i++){ cin >> arr[i]; arr[i] += arr[i - 1]; } dandiao[0].push_back({0, 0}); int ans = 0; for(int i = 1; i <= N; i++){ deque<pii> tmp = deque<pii>(); //cout << "i = " << i << endl; for(int j = 0; j < i; j++){ auto p = upper_bound(dandiao[j].begin(), dandiao[j].end(), pii{arr[i] - arr[j], maxN}); if(p == dandiao[j].begin()) continue; p--; //cout << "j = " << j << endl; //cout << "Found: " << p->F << " " << p->S << endl; tmp.emplace_back(arr[i] - arr[j], p->S + 1); //cout << "j = " << j << ", ans = " << p->S + 1 << endl; ans = max(ans, p->S + 1); } sort(tmp.begin(), tmp.end()); for(auto [s, x] : tmp){ if(!dandiao[i].size() || dandiao[i].back().S < x) dandiao[i].emplace_back(s, x); } } cout << ans << endl; }
#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...