제출 #1250905

#제출 시각아이디문제언어결과실행 시간메모리
1250905nasjesFeast (NOI19_feast)C++20
12 / 100
234 ms21236 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> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef long double ld; const ll dim = 2*(1e6)+7; //const ll mod = 1e9 + 7; const ll inf = 1e17 + 77; //#define endl "\n" #define fi first #define pb push_back #define se second #define vll vector<ll> ll n, m, k; ll t; ll a[dim]; ll dp[dim]; int main() { ll u, w,q, v; ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k; set<pll> sml; set<pll> s; ll sm=0; ll fl=1; ll c=0; for(int i=1; i<=n; i++) { cin >> a[i]; if (fl && a[i] >= 0) { sm += a[i]; } else if (fl == 0 && a[i] < 0) { sm += a[i]; } else { c++; s.insert({c, sm}); sm=0; fl = 1 - fl; sm += a[i]; } } c++; s.insert({c, sm}); while(s.size()>0 && (*s.begin()).se<=0){ s.erase(s.begin()); } while(s.size()>0 && (*s.rbegin()).se<=0){ auto it=(--s.end()); s.erase(it); } m=s.size(); m=(m+1)/2; ll ans=0; for(auto x: s){ ll p1=x.fi; ll p2=x.se; // cout<<p1<<" "<<p2<<endl; if(p2>0)ans+=x.se; sml.insert({abs(p2), p1}); } // cout<<ans<<endl; if(m<=k){ cout<<ans<<endl; return 0; } else{ m-=k; } while(m){ pll cur=(*sml.begin()); sml.erase(sml.begin()); /* if((*s.rbegin()).se<0){ s.erase((--s.end())); } if((*s.rbegin()).se<0){ s.erase((--s.end())); }*/ ll id=cur.se; auto it1=(s.lower_bound({id, -inf})); if(it1==(--s.end()) || it1==s.begin()){ if((*it1).se>0)m--; s.erase(it1); } else{ ll val=(*it1).se; auto it2=it1; it1++; it2--; pll x=(*it1); pll y=(*it2); s.erase(it1); s.erase(it2); sml.erase({abs(x.se), x.fi}); sml.erase({abs(y.se), y.fi}); s.insert({cur.se, x.se+y.se+val}); sml.insert({abs( x.se+y.se+val), cur.se}); m--; } } ans=0; for(auto x: s){ if(x.se>0)ans+=x.se; } cout<<ans<<endl; 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...