Submission #957387

#TimeUsernameProblemLanguageResultExecution timeMemory
957387ZeroCoolAliens (IOI16_aliens)C++17
100 / 100
916 ms22596 KiB
//* Nigga we hit em up like motherfucking Tupac Shakur #include "aliens.h" #include <bits/stdc++.h> using ll = long long; using namespace std; const ll N = 1e6 + 10; using ld = long double; #define pb push_back #define all(v) v.begin(), v.end() ll n, m, k; vector<pair<ll,ll> > v, x; ll ans; pair<ll,ll> dp[N]; ll L[N]; ll R[N]; ll cnt[N]; struct Line{ ll k, b; ll id; ll operator ()(ll x) { return k * x + b; } }; vector<Line> st; ld cross(Line x, Line y){ return (ld)(x.b - y.b) / (ld)(y.k - x.k); } void insert(Line nv){ ll m = st.size(); while(st.size() > 1 && cross(nv, st[m-1]) <= cross(st[m-1], st[m-2])){ st.pop_back(); --m; } st.pb(nv); } pair<ll,ll> query(ll x){ ll l = -1; ll r = st.size() - 1; while(r - l > 1){ ll mid = (l + r) / 2; if(cross(st[mid], st[mid+1]) > x)r = mid; else l = mid; } //++r; return {st[r](x), st[r].id}; } pair<ll,ll> f(ll C){ st.clear(); dp[0] = {0, 0}; for(ll i = 1;i<=n;i++){ insert({-L[i], dp[i-1].first + L[i] * L[i] - max(R[i-1] - L[i], 0ll) * max(0ll, R[i-1] - L[i]) + C, i -1}); pair<ll,ll> q = query(2 * R[i]); dp[i].first = q.first + R[i] * R[i]; dp[i].second = dp[q.second].second + 1; } return dp[n]; } long long take_photos(int nn, int mm, int kk, std::vector<int> rr, std::vector<int> cc) { n = nn; m = mm; k = kk; for(ll i = 1;i<=n;i++){ ll l = rr[i-1]; ll r = cc[i-1]; l++, r++; if(l > r)swap(l, r); v.pb({l, -r}); } sort(all(v)); ll mx = 0; x.pb({0, 0}); for(auto [l, r] : v){ r = -r; if(r > mx){ mx = r; x.pb({l, r}); } } sort(all(x)); n = x.size() - 1; for(ll i = 1;i<=n;i++){ L[i] = x[i].first - 1; R[i] = x[i].second; } ll l = -1; ll r = 1e15; ll ans = m * m; k = min(n, k); while(r - l > 1){ ll mid = (l + r) / 2; if(f(mid).second > k){ l = mid; }else{ r = mid; } } //cout<<ans<<endl; pair<ll,ll> p = f(l); return p.first - k * l; }

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:103:8: warning: unused variable 'ans' [-Wunused-variable]
  103 |     ll ans = m * m;
      |        ^~~
#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...