Submission #206898

#TimeUsernameProblemLanguageResultExecution timeMemory
206898brcodeBigger segments (IZhO19_segments)C++14
100 / 100
341 ms16120 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; const long long MAXN = 5e5+5; long long pref[MAXN]; long long dp[MAXN]; long long previ[MAXN]; int main(){ long long n; cin>>n; for(long long i=1;i<=n;i++){ cin>>pref[i]; pref[i] +=pref[i-1]; } for(long long i=1;i<=n;i++){ previ[i] = max(previ[i],previ[i-1]); dp[i] = dp[previ[i]]+1; //cout<<i<<" "<<dp[i]<<endl; long long l = i+1; long long r = n; long long target; if(previ[i]){ target = pref[i]-pref[previ[i]]; }else{ target = pref[i]; } long long tempans =0; while(l<=r){ long long mid = (l+r)/2; if(target<=pref[mid]-pref[i]){ r=mid-1; tempans= mid; }else{ l=mid+1; //tempans = mid; } } // cout<<i<<" "<<tempans<<endl; if(tempans){ previ[tempans] = max(previ[tempans],i); } } cout<<dp[n]<<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...