Submission #712472

#TimeUsernameProblemLanguageResultExecution timeMemory
712472SA01Aliens (IOI16_aliens)C++14
100 / 100
702 ms7740 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //#pragma GCC target("avx2,bmi,bmi2,lzcnt") using ll = long long int; using ull = unsigned long long int; using vi = vector<ll>; using ii = pair<ll,ll>; using vii = vector<ii>; using ld = long double; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template<class T> using ordered_set = tree < T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update >; //#ifdef SA_DEBUG template <class T> void print(T a) {cerr << a << endl;} template <class T, class... V> void print(T a, V... b) {cerr << a << ", "; print(b...);} #define dbg(...) cerr << "[" << __LINE__ << "] " << #__VA_ARGS__ << " :: ", print(__VA_ARGS__) //#else //#define dbg(...) 7 //#endif #define eb emplace_back #define fi first #define se second const ll INFL = 1e18; const int INF = 1e9; const double PI = acos(-1); const ll mod = 1e9+7; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); template<class T, class V> ostream& operator << (ostream &s, pair<T, V> a){ s << a.fi << ' ' << a.se; return s; } template<class T, class V> istream& operator >> (istream &s, pair<T, V> &a){ s >> a.fi >> a.se; return s; } template<class T> ostream& operator << (ostream &s, vector<T> a){ for(int i = 0; i < (int)a.size(); i++){ if(i > 0)s << ' ' ; s << a[i]; } return s; } template<class T> istream& operator >> (istream &s, vector<T> &a){ for(T &x : a)s >> x; return s; } template<class T> void input(T a[], int l, int r, istream &s = cin){ while(l <= r)s >> a[l++]; } template<class T> void output(T a[], int l, int r, bool en = true, ostream &s = cout){ while(l <= r){ s << a[l++]; if(l <= r) s << ' '; } if(en)s << "\n"; } const ll K = 1e4; long long take_photos(int n, int m, int k, std::vector<int> R, std::vector<int> C) { vector<ii> v(n); for(int i = 0; i < n; i++){ v[i] = {R[i], C[i]}; if(v[i].fi > v[i].se)swap(v[i].fi, v[i].se); v[i].se = -v[i].se; } sort(v.begin(), v.end()); vector<ii> V(1, ii(-1, -1)); for(auto x : v){ ll l, r; tie(l, r) = x; r = -r; if(V.back().se < r){ V.eb(l, r); } } n = V.size(); auto cost = [&](int i, int j){ ll cst = V[j].se - V[i].fi + 1; cst = cst * cst; if(i > 0 && V[i - 1].se >= V[i].fi){ ll temp = (V[i - 1].se - V[i].fi + 1); cst -= temp * temp; } return cst * K; }; //dbg(V); auto solve = [&](ll extra){ deque<ii> opt(1, ii(0, 1)); vi dp(n); vector<int> cnt(n); auto getVal = [&](int i, int j){ return dp[i] + cost(i + 1, j); }; auto cmp = [&](int i, int j, int l){ return getVal(i, l) >= getVal(j, l); }; for(int i = 1; i < n; i++){ //dp[i] = INFL; //for(int j = 0; j < i; j++){ //ll x = getVal(j, i) + extra; //if(x < dp[i])dp[i] = x, cnt[i] = cnt[j] + 1; //} assert(opt[0].se == i); //dbg(i); //for(auto x : opt)dbg(x); dp[i] = getVal(opt[0].fi, i) + extra; cnt[i] = cnt[opt[0].fi] + 1; opt[0].se++; while(opt.size() > 1 && opt[0].se >= opt[1].se)opt.pop_front(); while(!opt.empty() && cmp(opt.back().fi, i, opt.back().se)) opt.pop_back(); if(opt.empty()){ opt.eb(i, i + 1); continue; } int lo = opt.back().se + 1, hi = n; while(lo < hi){ int mid = (lo + hi) / 2; if(cmp(opt.back().fi, i, mid))hi = mid; else lo = mid + 1; } if(hi < n)opt.eb(i, lo); } return ii(dp[n - 1], cnt[n - 1]); }; ll lo = 0, hi = 1e15; //for(int i = lo; i <= hi; i++)dbg(solve(i)); //dbg(solve(20001)); //dbg(solve(20000)); //dbg(solve(19999)); //return 0; while(lo < hi){ ll mid = (lo + hi) >> 1; if(solve(mid).se > k)lo = mid + 1; else hi = mid; } ll a, b, c, d; tie(a, b) = solve(lo); //tie(c, d) = solve(lo + 1); //if(d < k)k = b; //assert(a % K == lo * k % K); return (a - lo * k + K - 1) / K; } /* 5 7 2 0 3 4 4 4 6 4 5 4 6 2 6 2 1 4 4 1 */

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:166:11: warning: unused variable 'c' [-Wunused-variable]
  166 |  ll a, b, c, d;
      |           ^
aliens.cpp:166:14: warning: unused variable 'd' [-Wunused-variable]
  166 |  ll a, b, c, d;
      |              ^
#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...