Submission #800465

#TimeUsernameProblemLanguageResultExecution timeMemory
800465GrindMachineFeast (NOI19_feast)C++17
53 / 100
1059 ms10912 KiB
// Om Namah Shivaya #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; typedef long long int ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL) #define pb push_back #define endl '\n' #define sz(a) a.size() #define setbits(x) __builtin_popcountll(x) #define ff first #define ss second #define conts continue #define ceil2(x, y) ((x + y - 1) / (y)) #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define yes cout << "Yes" << endl #define no cout << "No" << endl #define rep(i, n) for(int i = 0; i < n; ++i) #define rep1(i, n) for(int i = 1; i <= n; ++i) #define rev(i, s, e) for(int i = s; i >= e; --i) #define trav(i, a) for(auto &i : a) template<typename T> void amin(T &a, T b) { a = min(a, b); } template<typename T> void amax(T &a, T b) { a = max(a, b); } #ifdef LOCAL #include "debug.h" #else #define debug(x) 42 #endif /* refs: edi */ const int MOD = 1e9 + 7; const int N = 1e5 + 5; const int inf1 = int(1e9) + 5; const ll inf2 = ll(1e18) + 5; void solve(int test_case) { ll n,k; cin >> n >> k; vector<ll> a(n+5); rep1(i,n) cin >> a[i]; vector<ll> b; b.pb(a[1]); for(int i = 2; i <= n; ++i){ bool diff = false; if(a[i] < 0 and b.back() > 0) diff = true; if(a[i] > 0 and b.back() < 0) diff = true; if(diff){ b.pb(a[i]); } else{ b.back() += a[i]; } } if(b.front() <= 0){ b.erase(b.begin()); } if(sz(b) and b.back() <= 0){ b.pop_back(); } ll ans = 0; while(true){ vector<ll> positives; rep(i,sz(b)){ if(b[i] > 0){ positives.pb(b[i]); } } sort(rall(positives)); ll val = 0; rep(i,min((ll)sz(positives),k)){ val += positives[i]; } amax(ans,val); if(sz(positives) <= k) break; ll mn_abs = inf2, pos = -1; rep(i,sz(b)){ if(abs(b[i]) < mn_abs){ mn_abs = abs(b[i]); pos = i; } } b.insert(b.begin(),0); b.pb(0); pos++; b[pos] += b[pos-1]; b[pos] += b[pos+1]; b[pos-1] = b[pos+1] = 0; vector<ll> c; c.pb(b[0]); rep1(i,(ll)sz(b)-1){ bool diff = false; if(b[i] < 0 and c.back() > 0) diff = true; if(b[i] > 0 and c.back() < 0) diff = true; if(diff){ c.pb(b[i]); } else{ c.back() += b[i]; } } if(c.front() <= 0){ c.erase(c.begin()); } if(sz(c) and c.back() <= 0){ c.pop_back(); } b = c; } cout << ans << endl; } int main() { fastio; int t = 1; // cin >> t; rep1(i, t) { solve(i); } return 0; }

Compilation message (stderr)

feast.cpp: In function 'void solve(int)':
feast.cpp:30:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 | #define rep(i, n) for(int i = 0; i < n; ++i)
      |                                    ^
feast.cpp:95:9: note: in expansion of macro 'rep'
   95 |         rep(i,sz(b)){
      |         ^~~
feast.cpp:110:26: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  110 |         if(sz(positives) <= k) break;
      |                          ^
feast.cpp:30:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 | #define rep(i, n) for(int i = 0; i < n; ++i)
      |                                    ^
feast.cpp:113:9: note: in expansion of macro 'rep'
  113 |         rep(i,sz(b)){
      |         ^~~
#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...