Submission #1250655

#TimeUsernameProblemLanguageResultExecution timeMemory
1250655GeforgsFeast (NOI19_feast)C++20
100 / 100
283 ms20192 KiB
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <queue> #include <map> #include <stack> #include <bitset> #include <string> #include <cstring> #include <iterator> #include <random> #define ll long long #define ld long double #define inf (ll)(2*1e18) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define pb push_back #define endl "\n" using namespace std; void solve(){ ll n, k, i, x=0, y, res=0; cin>>n>>k; vector<ll> a; for(i=0;i<n;++i){ cin>>y; if(abs(x + y) == abs(x) + abs(y)){ x += y; }else{ a.pb(x); x = y; } } if(x > 0){ a.pb(x); } if(!a.empty() and a.front() < 0){ reverse(a); a.pop_back(); reverse(a); } set<pair<ll, ll>> s1, s2; for(i=0;i<a.size();++i){ s1.insert({abs(a[i]), i}); s2.insert({i, a[i]}); } while((s2.size() + 1)/2 > k){ x = s1.begin()->second; s1.erase(s1.begin()); auto it = s2.lower_bound({x, -inf}); if(it == s2.begin()){ s2.erase(s2.begin()); s1.erase({abs(s2.begin()->second), s2.begin()->first}); s2.erase(s2.begin()); }else if(it == --s2.end()){ s2.erase(it); it = --s2.end(); s1.erase({abs(it->second), it->first}); s2.erase(it); }else{ y = it->second; --it; y += it->second; ++it; ++it; y += it->second; s1.erase({abs(it->second), it->first}); s2.erase(it); it = s2.lower_bound({x, -inf}); --it; s1.erase({abs(it->second), it->first}); s2.erase(it); it = s2.lower_bound({x, -inf}); s2.erase(it); s1.insert({abs(y), x}); s2.insert({x, y}); } } for(auto it=s2.begin();it!=s2.end();++it){ if(it->second > 0){ res += it->second; } } cout<<res<<endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); srand(time(nullptr)); ll t=1; // cin>>t; for(;t>0;--t){ solve(); } return 0; }
#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...