#include <iostream>
#include <vector>
#include <set>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <cmath>
#include <queue>
//#include <string>
//#include <map>
//#include <complex>
//#include <chrono>
//#include <random>
//#include <stack>
//#include <set>
//#include <fstream>
#define FOR(i,n) for(int i = 0;i < n; i++)
#define FORE(i,a,b) for(int i = a; i <= b ; i++)
#define ss second
#define ff first
#define ll long long int
#define ii pair<ll,ll>
#define il pair<int,ll>
#define li pair<ll,int>
#define x ff
#define y ss
#define lii pair<ll,pair<int,int> >
#define piil pair<int ,pair<int,int> >
#define iii pair<pair<int,int>,int>
#define pll pair<ll,ll>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#include "aliens.h"
using namespace std;
const ll INF = 1e18;
vector<ii> all;
vector<ii> reduceList(vector<ii> v){
sort(v.begin(), v.end());
vector<ii> res;
ll mx = 0;
for(auto e:v){
if(res.empty())res.pb(e);
else if(res.back().ff < e.ff){
if(e.ss > mx)res.pb(e);
}else{
res.back() = e;
}
mx = max(mx,e.ss);
}
return res;
}
vector<ii> createRanges(vi r,vi c,int n){
vector<ii> all;
FOR(i,n)all.pb({min(r[i],c[i]),max(r[i],c[i])});
return all;
}
ll C1[50*1000+1];
void prec(){
C1[0] = 0;
FORE(i,1,(int)all.size()-1){
C1[i] = max((ll)0,all[i-1].ss - all[i].ff+1);
C1[i] *= C1[i];
}
}
ll cost(int t,int i){
i--;
//cout << "afsf " << i << " " << all.size() << endl;
ll t1 = all[i].ss - all[t].ff + 1; t1*=t1;
ll t2 = C1[t];
//cout << t1 << " " << t2 << endl;
//cout << t1-t2 << endl;
return t1 - t2;
}
class SqrtSegtree{
deque<pair<pll,int> > cht;
//deque<pll> buffer;
//vector<pll> all;
#define ld long double
inline ld intersect(pll p1,pll p2){
return ((ld)(p1.ss-p2.ss)*1.0)/(p2.ff-p1.ff);
}
inline ll eval(pll p1,ll x){
return p1.ff*x+p1.ss;
}
inline void update(pair<pll,int> e){
while(cht.size() > 1 and intersect(cht[(int)cht.size()-2].ff,e.ff) > intersect(cht.back().ff,e.ff))
cht.pop_back();
cht.push_back(e);
/*
cout << "LINE ADDED : " ;cout << e.ff.ff << " " << e.ff.ss << " " << e.ss << endl;
for(auto x:cht){
cout << x.ff.ff << " " << x.ff.ss << " " << x.ss << endl;
}
*/
}
li binsrch(ll x){
int lo = 0;int hi = (int)cht.size()-1;
li best = {INF,0};
/*for(auto e:cht){
if(best.ff > eval(e.ff,x)){
//best = {eval(e.ff,x),e.ss};
}
}
return best;*/
while(hi >= lo){
if(hi-lo < 5){
FORE(i,lo,hi){
ll val = eval(cht[i].ff,x);
if(best.ff > val){
best.ff = val;
best.ss = cht[i].ss;
}
//best = min(best,eval(cht[i],x));
}
break;
}
int mid = (lo+hi)/2;
ll val1 = eval(cht[mid].ff,x);
ll val2 = eval(cht[mid+1].ff,x);
ll val3 = eval(cht[mid-1].ff,x);
if(best.ff > val1){
best.ff = val1;
best.ss = cht[mid].ss;
}
if(best.ff > val2){
best.ff = val2;
best.ss = cht[mid+1].ss;
}
if(best.ff > val3){
best.ff = val3;
best.ss = cht[mid-1].ss;
}
//best = min(best,min(val1,min(val2,val3)));
if(val1 < val2 and val1 < val3){
break;
}else if(val1 >= val2){
lo = mid+1;
}else if(val1 >= val3){
hi = mid-1;
}
}
return best;
}
public :
inline void addLine(ll m,ll c,int id){
//buffer.pb({m,c});
//all.pb({m,c});
update({{m,c},id});
}
inline li query(ll x){
return binsrch(x);
}
inline void init(){
// buffer.clear();
cht.clear();
}
};
li dp[100*1000+1];
//int opt[2][100*1000+1];
ll E[100*1000+1];
//int opt[50*1000+1][2];
//Segtree ds[50*1000+1];
SqrtSegtree ds;
li computeDp(ll CC){
int n = all.size();
vector<pll> lns;
vector<ll> add;
FOR(i,n){
add.pb(all[i].ss*all[i].ss + 1 + 2*all[i].ss);
}
FOR(i,n)E[i] = all[i].ff*all[i].ff - 2*all[i].ff;
/*cout << "ADD VALUES : " << endl;
for(auto e : add){
cout << e << " ";
}
cout << endl;*/
ds.init();
dp[0] = {0,0};
for(int i = 1;i <= n;i++){
ds.addLine((-2*all[i-1].ff),(CC+dp[i-1].ff - C1[i-1] + E[i-1]) , dp[i-1].ss);
li mn = ds.query(all[i-1].ss);
// cout << "VAL : " << i << " " << mn.ff << endl;
dp[i] = {mn.ff + add[i-1],mn.ss+1};
}
return dp[n];
}
int check(ll C,int k){
li v1 = computeDp(C);
li v2 = computeDp(C-1);
// cout << "REPORT : " << C << " " << v1.ff << " " << v1.ss << endl;
if(v1.ss == k and v2.ss > k){
return 0;
}else if(v1.ss > k)return 1;
else if(v1.ss < k)return -1;
else if(v1.ss == k and v2.ss == k)return 2;
}
ll binsrch(int k){
// return 0;
ll toRet = INF;
ll lo = -INF;ll hi = INF;
outer:
while(hi >= lo){
// cout << hi << " " << lo << endl;
if(hi - lo <=5){
// cout << "bu" << endl;
for(ll v = lo;v <= hi;v++){
if(check(v,k) == 0){
toRet = min(toRet, computeDp(v).ff - k*v);
}
}
return toRet;
}else{
ll mid = (hi+lo)/2;
//ll val =
switch(check(mid,k)){
case 1:{
lo = mid+1;
break;
}
case 2:{
hi = mid-1;
toRet = min(toRet,computeDp(mid).ff-k*mid);
break;
}case -1:{
hi = mid-1;
break;
}case 0:{
toRet = min(toRet, computeDp(mid).ff - k*mid);
return toRet;
break;
}
}
}
}
return toRet;
}
/*
void computeDp2(int k){
int n = all.size();
k = min(n,k);
FOR(i,n+1)dp[0][i] = INF;
dp[0][0] = 0;
FOR(j,k+1){
if(j == 0)continue;
dp[1][0] = 0;
for(int i = n;i>=1;i--){
ll opti = dp[0][0]+cost(0,i);
int ind = 1;
FORE(t,max(opt[0][i],2),(i==n?n:opt[1][i+1])){
if(opti > dp[0][t-1] + cost(t-1,i)){
opti = dp[0][t-1] + cost(t-1,i);
ind = t;
}
}
opt[1][i] = ind;
dp[1][i] = opti;
}
FOR(i,n)dp[0][i] = dp[1][i],opt[0][i]= opt[1][i];
}
}
*/
ll take_photos(int n,int m,int k,vi r,vi c){
all = reduceList(createRanges(r,c,n));
prec();
//if(k > 101)computeDp2(k);else
//for(auto e:all)cout << e.ff<< ";"<<e.ss << endl;
//computeDp(k);
//return kk;
//k = min(k,(int)all.size());
//cout << k << endl;
//ll kk = check(1000,k);
ll ans = binsrch(k);
li val = computeDp(0);
if(val.ss <= k)ans = min(ans,(ll)val.ff);
return ans;
/*
FOR(i,min((int)all.size(),k)+1){
FOR(j,all.size()+1){
cout << dp[i][j] << " ";
};cout << endl;}*/
//return dp[1][all.size()];
//return 0;
}
/*x
int main(){
//int a[2] = {2,4,4,4,4};
//int b[2] = {3,5,6,5,6};
vi a;
vi b;
a.pb(0);a.pb(4);a.pb(4);a.pb(4);a.pb(4);
b.pb(3);b.pb(4);b.pb(6);b.pb(5);b.pb(6);
cout << take_photos(5,7,3,a,b) << endl;
return 0;
}
*/
Compilation message
aliens.cpp: In function 'long long int binsrch(int)':
aliens.cpp:238:5: warning: label 'outer' defined but not used [-Wunused-label]
outer:
^~~~~
aliens.cpp: In function 'int check(long long int, int)':
aliens.cpp:231:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
2 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
3 |
Correct |
3 ms |
256 KB |
Correct answer: answer = 4 |
4 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 12 |
5 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 52 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 210 |
7 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 88 |
8 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7696 |
9 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 1 |
10 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 2374 |
11 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 9502 |
12 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 49 |
13 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 151 |
14 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7550 |
15 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7220 |
16 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 7550 |
17 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 10000 |
18 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 10000 |
19 |
Correct |
3 ms |
376 KB |
Correct answer: answer = 624 |
20 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 10000 |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 1 |
2 |
Correct |
8 ms |
300 KB |
Correct answer: answer = 4 |
3 |
Correct |
2 ms |
360 KB |
Correct answer: answer = 1 |
4 |
Correct |
3 ms |
512 KB |
Correct answer: answer = 5 |
5 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 41 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 71923 |
7 |
Correct |
4 ms |
384 KB |
Correct answer: answer = 77137 |
8 |
Incorrect |
4 ms |
384 KB |
Wrong answer: output = 1000000000000000000, expected = 764 |
9 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
2 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
3 |
Correct |
3 ms |
256 KB |
Correct answer: answer = 4 |
4 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 12 |
5 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 52 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 210 |
7 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 88 |
8 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7696 |
9 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 1 |
10 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 2374 |
11 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 9502 |
12 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 49 |
13 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 151 |
14 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7550 |
15 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7220 |
16 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 7550 |
17 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 10000 |
18 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 10000 |
19 |
Correct |
3 ms |
376 KB |
Correct answer: answer = 624 |
20 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 10000 |
21 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 1 |
22 |
Correct |
8 ms |
300 KB |
Correct answer: answer = 4 |
23 |
Correct |
2 ms |
360 KB |
Correct answer: answer = 1 |
24 |
Correct |
3 ms |
512 KB |
Correct answer: answer = 5 |
25 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 41 |
26 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 71923 |
27 |
Correct |
4 ms |
384 KB |
Correct answer: answer = 77137 |
28 |
Incorrect |
4 ms |
384 KB |
Wrong answer: output = 1000000000000000000, expected = 764 |
29 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
2 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
3 |
Correct |
3 ms |
256 KB |
Correct answer: answer = 4 |
4 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 12 |
5 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 52 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 210 |
7 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 88 |
8 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7696 |
9 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 1 |
10 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 2374 |
11 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 9502 |
12 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 49 |
13 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 151 |
14 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7550 |
15 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7220 |
16 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 7550 |
17 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 10000 |
18 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 10000 |
19 |
Correct |
3 ms |
376 KB |
Correct answer: answer = 624 |
20 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 10000 |
21 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 1 |
22 |
Correct |
8 ms |
300 KB |
Correct answer: answer = 4 |
23 |
Correct |
2 ms |
360 KB |
Correct answer: answer = 1 |
24 |
Correct |
3 ms |
512 KB |
Correct answer: answer = 5 |
25 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 41 |
26 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 71923 |
27 |
Correct |
4 ms |
384 KB |
Correct answer: answer = 77137 |
28 |
Incorrect |
4 ms |
384 KB |
Wrong answer: output = 1000000000000000000, expected = 764 |
29 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
2 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
3 |
Correct |
3 ms |
256 KB |
Correct answer: answer = 4 |
4 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 12 |
5 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 52 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 210 |
7 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 88 |
8 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7696 |
9 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 1 |
10 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 2374 |
11 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 9502 |
12 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 49 |
13 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 151 |
14 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7550 |
15 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7220 |
16 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 7550 |
17 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 10000 |
18 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 10000 |
19 |
Correct |
3 ms |
376 KB |
Correct answer: answer = 624 |
20 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 10000 |
21 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 1 |
22 |
Correct |
8 ms |
300 KB |
Correct answer: answer = 4 |
23 |
Correct |
2 ms |
360 KB |
Correct answer: answer = 1 |
24 |
Correct |
3 ms |
512 KB |
Correct answer: answer = 5 |
25 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 41 |
26 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 71923 |
27 |
Correct |
4 ms |
384 KB |
Correct answer: answer = 77137 |
28 |
Incorrect |
4 ms |
384 KB |
Wrong answer: output = 1000000000000000000, expected = 764 |
29 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
2 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 4 |
3 |
Correct |
3 ms |
256 KB |
Correct answer: answer = 4 |
4 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 12 |
5 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 52 |
6 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 210 |
7 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 88 |
8 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7696 |
9 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 1 |
10 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 2374 |
11 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 9502 |
12 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 49 |
13 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 151 |
14 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7550 |
15 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 7220 |
16 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 7550 |
17 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 10000 |
18 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 10000 |
19 |
Correct |
3 ms |
376 KB |
Correct answer: answer = 624 |
20 |
Correct |
2 ms |
256 KB |
Correct answer: answer = 10000 |
21 |
Correct |
3 ms |
384 KB |
Correct answer: answer = 1 |
22 |
Correct |
8 ms |
300 KB |
Correct answer: answer = 4 |
23 |
Correct |
2 ms |
360 KB |
Correct answer: answer = 1 |
24 |
Correct |
3 ms |
512 KB |
Correct answer: answer = 5 |
25 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 41 |
26 |
Correct |
2 ms |
384 KB |
Correct answer: answer = 71923 |
27 |
Correct |
4 ms |
384 KB |
Correct answer: answer = 77137 |
28 |
Incorrect |
4 ms |
384 KB |
Wrong answer: output = 1000000000000000000, expected = 764 |
29 |
Halted |
0 ms |
0 KB |
- |