#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const int M = 1e6 + 5;
deque<int> dq;
ld dp[M], C[M];
struct line {
ld k, c;
ld f(ld x) {
return k * x + c;
};
} T[M];
ld X(line &A, line &B) {
return (ld)(A.c - B.c) / (B.k - A.k);
}
long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) {
int mn[m+1];
fill(mn, mn+m+1, 1e9);
for (int i = 0; i < n; ++i) r[i]++, c[i]++;
for (int i = 0; i < n; ++i) mn[max(r[i], c[i])] = min({mn[max(r[i], c[i])], r[i], c[i]});
ld L = 0, R = m * (1ll) * m, ans = 1e18;
for (int _ = 0; _ < 20; ++_) { // popravi!
ld mid = (L + R)/2;
T[0] = {0, 0}, dq = {0}, C[0] = 0;
for (ll i = 1; i <= m; ++i) {
if (mn[i] != 1e9) {
int sz = dq.size(), p = -1;
while (sz > 1 && dq[sz-1] >= mn[i]) p = dq[sz-1], dq.pop_back(), sz--;
while (dq.size() > 1 && X(T[dq[0]], T[dq[1]]) < i) dq.pop_front();
dp[i] = T[dq[0]].f(i) + i * i + mid, C[i] = C[dq[0]]+1;
if (p != -1) {
T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i];
int sz = dq.size() - 1;
while (sz >= 1 && X(T[dq[sz-1]], T[p]) <= X(T[dq[sz-1]], T[dq[sz]])) dq.pop_back(), sz--;
dq.push_back(p);
}
}
else
dp[i] = dp[i-1], C[i] = C[i-1];
int sz = dq.size()-1;
T[i] = {-2*i, dp[i] - i * i + 2 * i * i};
while (sz >= 1 && X(T[dq[sz-1]], T[i]) <= X(T[dq[sz-1]], T[dq[sz]])) dq.pop_back(), sz--;
dq.push_back(i);
}
if (C[m] <= k)
R = mid, ans = dp[m] - C[m] * mid;
else
L = mid;
}
return roundl(ans);
}
Compilation message (stderr)
aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:37:31: warning: narrowing conversion of '(-2 * p)' from 'int' to 'ld' {aka 'long double'} [-Wnarrowing]
37 | T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i];
| ~~^~
aliens.cpp:46:23: warning: narrowing conversion of '(-2 * i)' from 'll' {aka 'long long int'} to 'ld' {aka 'long double'} [-Wnarrowing]
46 | T[i] = {-2*i, dp[i] - i * i + 2 * i * i};
| ~~^~
aliens.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
# | 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... |