제출 #474705

#제출 시각아이디문제언어결과실행 시간메모리
474705vipghn2003Bigger segments (IZhO19_segments)C++14
100 / 100
194 ms56008 KiB
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
using namespace std;

const int N=5e5+5;
int n;
ll a[N];
map<int,int>dp[N];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    //freopen("Partition.INP","r",stdin);
    //freopen("Partition.OUT","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    //reverse(a+1,a+n+1);
    for(int i=1;i<=n;i++) a[i]+=a[i-1];
    dp[1][0]=0;
    for(int i=1;i<n;i++)
    {
        while(dp[i].size()>1) dp[i].erase(dp[i].begin());
        for(auto&x:dp[i])
        {
            dp[i+1][x.fi]=max(dp[i+1][x.fi],x.se);
            int v=lower_bound(a+1,a+n+1,2*a[i]-a[x.se])-a;
            if(v<=n) dp[v][x.fi+1]=max(dp[v][x.fi+1],i);
        }
    }
    while(dp[n].size()>1) dp[n].erase(dp[n].begin());
    auto res=*dp[n].begin();
    cout<<res.fi+1;
}
#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...