Submission #889149

#TimeUsernameProblemLanguageResultExecution timeMemory
889149dimashhhFeast (NOI19_feast)C++17
12 / 100
130 ms40816 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 1, MOD = 998244353; typedef long long ll; #define int long long int n, k, a[N],p[N]; bool ok[N]; vector<ll> b, sum(N); int get(int v){ if(p[v] == v) return v; return p[v] = get(p[v]); } void merge(int v,int u){ v = get(v); u = get(u); if(v == u) return; p[v] = u; sum[u] += sum[v]; } set<pair<ll,ll>> st; ll res = 0,col = 0; void del(int i){ if(i >= 0 && i < n){ i = get(i); st.erase({abs(sum[i]),i}); if(sum[i] >= 0){ res -= sum[i]; col--; } } } void test() { cin >> n >> k; ll lst = 0; for (int i = 1; i <= n; i++) { cin >> a[i]; ok[i] = (a[i] >= 0); } ll cur = 0; ok[0] = 1; for (int i = 1; i <= n; i++) { if (ok[i] == ok[i - 1]) { cur += a[i]; } else { if(b.empty() && cur < 0){ } else b.push_back(cur); cur = a[i]; } } if(cur >= 0) b.push_back(cur); n = (int)b.size(); for(int i = 0;i < n;i++){ p[i] = i; sum[i] = b[i]; if(b[i] >= 0){ col++; res += b[i]; } st.insert({abs(b[i]),i}); } int it = 0; while(col > k){ auto[x,y] = (*st.begin()); st.erase({x,y}); // cout << res << ' ' << x << ' ' << y << '\n'; it++; del(y); del(y - 1); del(y + 1); ll nv = sum[y] + (y + 1 < n ? sum[get(y + 1)] : 0) + (y ? sum[get(y - 1)] : 0); if(y + 1 < n) merge(y,y + 1); if(y) merge(y,y - 1); if(nv >= 0){ col++; res += nv; } // cout << res << '\n'; } cout << res << '\n'; } main() { ios_base::sync_with_stdio(0); cin.tie(0); int T = 1; // cin >> T; while (T--) test(); }

Compilation message (stderr)

feast.cpp: In function 'void test()':
feast.cpp:35:8: warning: unused variable 'lst' [-Wunused-variable]
   35 |     ll lst = 0;
      |        ^~~
feast.cpp: At global scope:
feast.cpp:88:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   88 | main()
      | ^~~~
#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...