#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;
ll dp[M], C[M];
struct line {
ll k, c;
ll f(ll 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]});
ll L = 0, R = m * (1ll) * m, ans = 1e18;
while (L <= R) {
ll 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;
sz = dq.size();
if (p != -1) {
T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i];
dq.push_back(p);
}
}
else
dp[i] = dp[i-1], C[i] = C[i-1];
int sz = dq.size()-1;
while (sz > 1 && X(T[dq[sz-2]], T[i]) <= X(T[dq[sz-1]], T[i])) dq.pop_back(), sz--;
T[i] = {-2*i, dp[i] - i * i + 2 * i * i};
dq.push_back(i);
}
if (C[m] <= k)
R = mid-1, ans = dp[m] - k * mid;
else
L = mid+1;
}
return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
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... |