제출 #174705

#제출 시각아이디문제언어결과실행 시간메모리
174705GoldeNBigger segments (IZhO19_segments)C++17
100 / 100
114 ms21120 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define f first #define s second #define pb push_back #define all(a) a.begin(),a.end() typedef long long ll; typedef long double ld; typedef pair <int,int> pii; typedef pair <ll,ll> pll; typedef vector <ll> vl; typedef vector <int> vi; typedef vector <bool> vb; typedef vector <vector <int> > vvi; typedef vector <vector <ll> > vvl; typedef vector <pair<int,int> > vii; typedef vector <pair<ll,ll> > vll; string itos(int n) {stringstream ss;ss<<n;string s=ss.str();return s;} ll ppow(ll x,ll y,ll mod) { ll res=1; while(y) { if(y&1) res=res*x%mod; y>>=1; x=x*x%mod; } return res; } const int N=5e5+5; const ll inf=1e18; ll a[N],pref[N],dp[N],ind[N]; int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n; cin >> n; for (int i=1;i<=n;++i) { cin >> a[i]; } pref[1]=a[1]; for (int i=2;i<=n;++i) { pref[i]=pref[i-1]+a[i]; } for (int i=1;i<=n;++i) { ind[i]=max(ind[i],ind[i-1]); dp[i]=dp[ind[i]]+1; int l=i,r=n+1; ll x=2*pref[i]-pref[ind[i]]; while (l+1 < r) { int m=(l+r)/2; if (pref[m] >= x) { r=m; } else { l=m; } } ind[r]=i; } cout << dp[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...