제출 #170263

#제출 시각아이디문제언어결과실행 시간메모리
170263dennisstarAliens (IOI16_aliens)C++11
4 / 100
2057 ms776 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;}

vector<pll> stk; vlm cnt; int fr;
void init() {fr=0; stk.clear(); cnt.clear();}
ll lin(ll i, ll x) { return stk[i].fi*x+stk[i].se;}
pll cal(ll x) {
	while (fr<stk.size()-1 && lin(fr, x)>=lin(fr+1, x)) fr++;
	return {lin(fr, x), cnt[fr]};
}

pll f(ll cost) {
	init();

	vlm Dp(n+1), c(n+1);
	stk.push_back({-2*(ar[1].se-1), sq(ar[1].se-1)+cost});
	cnt.push_back(1);
	Dp[1]=cal(ar[1].fi).fi+sq(ar[1].fi);
	c[1]=1;

	pll pl;
	
	for (int i=2; i<=n; i++) {
		stk.push_back({-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});
		cnt.push_back(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=0, e=(m*m);
	while (s<e) {
		ll md=(s+e)/2;
		if (f(md).fi>k) s=md;
		else e=md;
	}
	return f(s).se;
}

컴파일 시 표준 에러 (stderr) 메시지

aliens.cpp: In function 'pll cal(ll)':
aliens.cpp:25:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (fr<stk.size()-1 && lin(fr, x)>=lin(fr+1, x)) fr++;
         ~~^~~~~~~~~~~~~
#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...