This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "aliens.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const int LIM=1e5+7;
pair<ll,ll>T[LIM];
ll dp[LIM], lst[LIM], n, m, k;
ll licz(ll a, ll b) {
ll ans=b-a+1;
if(ans<=0) return 0;
return ans*ans;
}
int solve(ll c) {
rep(i, n) {
lst[i+1]=lst[i];
dp[i+1]=dp[lst[i+1]-1]+licz(T[lst[i+1]].st, T[i+1].nd)-licz(T[i+1].st, T[lst[i+1]-1].nd);
while(lst[i+1]<i+1) {
ll nowe=dp[lst[i+1]];
nowe+=licz(T[lst[i+1]+1].st, T[i+1].nd)-licz(T[i+1].st, T[lst[i+1]].nd);
if(nowe<dp[i+1]) {
dp[i+1]=nowe;
++lst[i+1];
} else break;
}
dp[i+1]+=c;
}
int ans=0, akt=n;
while(akt) {
++ans;
akt=lst[akt]-1;
}
return ans;
}
ll take_photos(int N, int M, int K, vector<int>r, vector<int>c) {
pair<ll,ll>P[N];
rep(i, N) P[i]={min(r[i], c[i]), -max(r[i], c[i])};
sort(P, P+N);
ll ma=-1;
rep(i, N) {
if(-P[i].nd>ma) {
ma=-P[i].nd;
++n;
T[n]={P[i].st, -P[i].nd};
}
}
m=M; k=K;
T[0]={-1, -1};
lst[0]=1;
ll po=0, ko=10000000000000;
while(po<ko) {
ll sr=(po+ko)/2;
if(solve(sr)>k) po=sr+1; else ko=sr;
}
ll x=solve(po);
return dp[n]-po*x;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |