Submission #170275

#TimeUsernameProblemLanguageResultExecution timeMemory
170275dennisstarAliens (IOI16_aliens)C++11
4 / 100
2 ms764 KiB
#include "aliens.h" #include <bits/stdc++.h> #define fi first #define se second #define ryan bear using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef long double ld; typedef vector<int> vim; typedef vector<ll> vlm; int n, m; pii im[100010]; vim chk(100010); vector<pll> ar; ll sq(ll i) {return i*i;} pll stk[100010]; ll cnt[100010]; int fr, tp; ll lin(ll i, ll x) { return stk[i].fi*x+stk[i].se;} pll cal(ll x) { while (fr<tp-1 && lin(fr, x)>=lin(fr+1, x)) fr++; return {lin(fr, x), cnt[fr]}; } void add(ll a, ll b, ll c) { while (fr<tp-1 && (stk[tp-1].fi-a)*(stk[tp-2].se-stk[tp-1].se) <= (stk[tp-2].fi-stk[tp-1].fi)*(stk[tp-2].se-b)) tp--; stk[tp]={a, b}; cnt[tp++]=c; } pll f(ll cost) { fr=tp=0; vlm Dp(n+1), c(n+1); add(-2*(ar[1].se-1), sq(ar[1].se-1)+cost, 1); Dp[1]=cal(ar[1].fi).fi+sq(ar[1].fi); c[1]=1; pll pl; for (int i=2; i<=n; i++) { add(-2*(ar[i].se-1), sq(ar[i].se-1)-sq( max(0ll, (ar[i-1].fi-ar[i].se+1)) )+Dp[i-1]+cost, c[i-1]+1); pl=cal(ar[i].fi); Dp[i]=sq(ar[i].fi)+pl.fi, c[i]=pl.se; } return {c[n], Dp[n]-c[n]*cost}; } ll take_photos(int n_, int m_, int k, vim r, vim c) { //(r-c+1)^2 n=n_; m=m_; for (int i=0; i<n; i++) r[i]++, c[i]++; for (int i=0; i<n; i++) {if (r[i]<c[i]) swap(r[i], c[i]);} for (int i=0; i<n; i++) im[i]={r[i],c[i]}; sort(im, im+n, [](pii pi1, pii pi2){return pi1.fi==pi2.fi?pi1.se<pi2.se:pi1.fi>pi2.fi;}); int mn=m+1; ar.push_back({0,0}); for (int i=0; i<n; i++) { if (mn<=im[i].se) continue; ar.push_back({(ll)im[i].fi, (ll)im[i].se}); mn=min(mn, im[i].se); } n=ar.size()-1; sort(ar.begin(), ar.end()); ll s=-1, e=(m*m); while (s+1<e) { ll md=(s+e)/2; (f(md).fi>(ll)k?s:e)=md; } return f(e).se; }
#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...