Submission #1209936

#TimeUsernameProblemLanguageResultExecution timeMemory
1209936sourismkiiFeast (NOI19_feast)C++20
100 / 100
130 ms12172 KiB
//#pragma GCC optimize("O3") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; #define ll long long #define db double #define is insert #define pb push_back #define pii pair<int, int> #define pll pair<long long, long long> #define mkp make_pair #define X first #define Y second #define vi vector<int> #define vpi vector<pair<int, int>> #define msi multiset<int> #define int long long const int m97 = (int)1e9+7; const int N = 300005; const int K = 5; const int inf = (int)1e18; mt19937 mt(chrono::steady_clock::now().time_since_epoch().count()); int n, k, a[N]; pii calc(int lamda){ pii dp[n+1][2]; dp[1][0] = {0, 0}; dp[1][1] = {a[1] - lamda, 1}; for(int i=2; i<=n; i++){ dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = max(mkp(dp[i-1][0].X + a[i] - lamda, dp[i-1][0].Y + 1), mkp(dp[i-1][1].X + a[i], dp[i-1][1].Y)); } return max(dp[n][0], dp[n][1]); } void solve(){ cin >> n >> k; for(int i=1; i<=n; i++) cin >> a[i]; int l = 0, r = (int)1e18; while(l < r){ int m = (l + r + 1) >> 1; int res = calc(m).Y; if(res >= k) l = m; else r = m - 1; } cout << calc(l).X + l * k; } signed main(){ // freopen("*.INP", "r", stdin); // freopen("*.OUT", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tt = 1; //cin >> tt; while(tt--){ solve(); } } /* sample */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...