제출 #1335513

#제출 시각아이디문제언어결과실행 시간메모리
1335513WarinchaiBigger segments (IZhO19_segments)C++20
100 / 100
93 ms43428 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;

int ar[500005];
int mn[500005];
int inf=1e18;
int rans[500005];
int sum[500005];
vector<pair<int,int>>add[500005];

int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    for(int i=1;i<=n;i++){
        cin>>ar[i];
        sum[i]=sum[i-1]+ar[i];
        mn[i]=inf;
    }
    pair<int,int>temp={0,0};
    for(int i=1;i<=n;i++){
        for(auto x:add[i])temp=max(temp,x);
        mn[i]=sum[i]-sum[temp.second];
        rans[i]=temp.first+1;
        int st=i+1,en=n,id=n+1;
        while(st<=en){
            int m=(st+en)/2;
            if(sum[m]-sum[i]>=mn[i]){
                id=m;
                en=m-1;
            }else{
                st=m+1;
            }
        }
        add[id].push_back({rans[i],i});
        //cerr<<"i:"<<i<<" "<<mn[i]<<" "<<rans[i]<<" "<<id<<"\n";
    }
    cout<<rans[n];
}
#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...