Submission #1326915

#TimeUsernameProblemLanguageResultExecution timeMemory
1326915Jawad_Akbar_JJAliens (IOI16_aliens)C++20
100 / 100
139 ms11244 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define ll long long int const ll N = 1<<17; ll dp[N], op[N], m[N], c[N], x[N], y[N], M, mx; ll intersection(ll i, ll j){ ll A = c[j] - c[i], B = m[i] - m[j]; return A / B + (A % B != 0); } ll sqr(ll A){ return A * A; } pair<ll, ll> profit(ll n, ll Mid){ vector<ll> v = {0}, st = {0}; c[0] = x[1] * (x[1] - 2) + 1; for (ll i=1;i<=n;i++){ ll l = 0, r = v.size(); while (l + 1 < r){ ll mid = (l + r) >> 1; if (st[mid] <= y[i]) l = mid; else r = mid; } l = v[l]; dp[i] = dp[l] + sqr(y[i] - x[l + 1] + 1) + Mid; op[i] = op[l] + 1; if (i < n and x[i+1] <= y[i]) dp[i] -= sqr(y[i] - x[i+1] + 1); c[i] = dp[i] + x[i+1] * (x[i+1] - 2) + 1; while (v.size() > 1 and st.back() >= intersection(v.back(), i)) v.pop_back(), st.pop_back(); st.push_back(intersection(v.back(), i)); v.push_back(i); } return {dp[n], op[n]}; } long long take_photos(int n, int mm, int k, vector<int> R, vector<int> C){ M = mm; vector<pair<ll, ll>> vc; for (ll i=0;i<n;i++){ if (R[i] > C[i]) swap(R[i], C[i]); vc.push_back({R[i]+1, C[i]+1}); } sort(begin(vc), end(vc)); n = 0; for (auto [i, j] : vc){ if (j <= mx) continue; while (x[n] == i) n--; n++, x[n] = i, y[n] = j, mx = j; } for (ll i=1;i<=n;i++) m[i-1] = -2 * x[i]; ll l = 0, r = M * M + 5; while (l + 1 < r){ ll mid = (l + r) / 2; if (profit(n, mid).second < k) r = mid; else l = mid; } auto [a, b] = profit(n, l); return a - k * l; }

Compilation message (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 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...