이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |