제출 #863507

#제출 시각아이디문제언어결과실행 시간메모리
863507letterc67Bigger segments (IZhO19_segments)C++14
13 / 100
1 ms4560 KiB
#include <bits/stdc++.h> using namespace std; #define pi pair<int, int> #define inf32 0x3f3f3f3f #define inf64 0x3f3f3f3f3f3f3f3f #define all(x) x.begin(), x.end() #define Unique(v) v.erase(unique(all(v)), v.end()) #define int long long #define setinf(d) memset(d, inf32, sizeof d) #define setneg(d) memset(d, -1, sizeof d) #define set0(d) memset(d, 0, sizeof d) #define Log2(x) 63 - __builtin_clzll(x) #define oo 2e18 #define mod 1000000007 #define FILENAME "f" const int maxn = 5e5 + 5; int n; int a[maxn], dp[maxn], last[maxn]; signed main(){ // freopen( FILENAME".inp", "r", stdin); // freopen( FILENAME".out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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]; for(int i = 1; i <= n; i++){ dp[i] = 1; int l = 1, r = i - 1, p = -1; while(l <= r){ int m = (l + r) >> 1; if(a[m] + last[m] <= a[i]){ p = m; l = m + 1; }else r = m - 1; } // cout << p << endl; if(p != -1){ dp[i] = dp[p] + 1; last[i] = a[i] - a[p]; }else{ last[i] = a[i]; } // cout << i << ' ' << p << ' ' << last[i] << endl ; } // cout << dp[2]; 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...