Submission #1133548

#TimeUsernameProblemLanguageResultExecution timeMemory
1133548HuyATHoliday (IOI14_holiday)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h> #define newl '\n' #include<holiday.h> const int N = 1e5 + 10; const int V = 1e7 + 10; const long long INF = 1e18; const long long M = 1e9 + 7; struct Node{ Node *l,*r; long long val,cnt; Node(long long val,long long cnt) : l(nullptr),r(nullptr),val(val),cnt(cnt){ } Node(Node *ll,Node *rr){ assert(ll && rr); l = ll; r = rr; val = l->val + r->val; cnt = l->cnt + r->cnt; } }; typedef Node* pNode; struct PersistentST{ std::vector<pNode> root; PersistentST(){ root.emplace_back(new Node(0LL,0LL)); root.back()->l = root.back(); root.back()->r = root.back(); } pNode update(int l,int r,int pos,int val,pNode t){ if(l == r){ return new Node(val,1); } int mid = (l + r) / 2; if(pos <= mid){ return new Node(update(l,mid,pos,val,t->l),t->r); } return new Node(t->l,update(mid + 1,r,pos,val,t->r)); } long long query(int l,int r,int val,pNode t){ if(l == r){ return t->val; } int mid = (l + r) / 2; if(val <= t->l->cnt){ return query(l,mid,val,t->l); } return t->l->val + query(mid + 1,r,val - t->l->cnt,t->r); } public: long long query(int l,int r,int pos,int ver){ return query(l,r,pos,root[ver]); } void update(int l,int r,int pos,int val,int ver){ root.emplace_back(update(l,r,pos,val,root[ver])); } }; std::vector<long long> optimal(const std::vector<int> &a){ int n = (int)a.size() - 1; std::vector<int> id(n + 1,0); std::vector<long long> ans(1,0); auto compress = [&](){ std::map<int,int> m; for(int i = 1;i <= n;++i){ ++m[a[i]]; } std::map<int,int>::iterator it; for(it = m.end();it != m.begin();it = prev(it)){ if(it != m.end() && next(it) != m.end()){ it->second += next(it)->second; } } if((int)m.size() > 1){ it->second += next(it)->second; } for(int i = n;i >= 1;--i){ // std::cout << "IMP " << i << " " << m[a[i]] << newl; id[i] = m[a[i]]--; } }; compress(); std::set<int> s; std::map<int,int> m; PersistentST st; auto eval = [&](int ver,int opt) -> long long{ if(ver > opt){ return -INF; } return st.query(1,n,opt - (ver - 1),ver); }; auto get = [&](int opt) -> long long{ // assert(!s.empty()); int x = *prev(s.upper_bound(opt)); int ver = m[x]; assert(opt >= ver); return eval(ver,opt); }; auto dominate = [&](int cur) -> void{ while(!s.empty()){ int x = *s.rbegin(); // std::cerr << eval(m[x],x) << " " << eval(cur,x) << newl; if(eval(m[x],x) <= eval(cur,x)){ s.erase(x); m.erase(x); }else{ break; } } if(s.empty()){ s.insert(1); m[1] = cur; return; } int prev = m[*s.rbegin()]; int lo = *s.rbegin() + 1,hi = n * 2,ans = n * 2; while(lo <= hi){ int mid = (lo + hi) / 2; if(eval(prev,mid) < eval(cur,mid)){ hi = mid - 1; ans = mid; }else{ lo = mid + 1; } } s.insert(ans); m[ans] = cur; // auto dfs = [&](auto dfs, int u, int p) -> void{ // for(int v : adj[u]){ // if(v == p) continue; // dfs(dfs, v, u); // } // } }; for(int i = 1;i <= n;++i){ st.update(1,n,id[i],a[i],i - 1); dominate(i); } // return ans; for(int i = 1;i <= n * 2;++i){ ans.emplace_back(get(i)); // std::cout << ans.back() << " "; } // std::cout << newl; return ans; } long long solve(const std::vector<int> &a,int s,int k){ int n = (int)a.size() - 1; long long ans = 0; // return 0; std::vector<int> left(2,0),right(1,0); for(int i = s;i <= n;++i){ right.emplace_back(a[i]); } for(int i = s - 1;i >= 1;--i){ left.emplace_back(0); left.emplace_back(a[i]); } // std::cerr << "LEFT\n"; std::vector<long long> f = optimal(left); // std::cerr << "RIGHT\n"; std::vector<long long> f1 = optimal(right); // return 0; for(int i = 0;i < std::min((int)f1.size(),k + 1);++i){ int it = std::max(0,std::min((int)f.size() - 1,k - i)); ans = std::max(ans,f[it] + f1[i]); } return ans; } long long int findMaxAttraction(int n,int start,int d,int attraction[]){ long long ans = 0; ++start; std::vector<int> a(n + 1,0); for(int i = 1;i <= n;++i){ a[i] = attraction[i - 1]; } ans = std::max(ans,solve(a,start,d)); std::reverse(a.begin() + 1,a.end()); start = n - start + 1; ans = std::max(ans,solve(a,start,d)); return ans; } //int main(){ // std::ios_base::sync_with_stdio(false); // std::cin.tie(nullptr);std::cout.tie(nullptr); // // return 0; //}

Compilation message (stderr)

holiday.cpp:3:9: fatal error: holiday.h: No such file or directory
    3 | #include<holiday.h>
      |         ^~~~~~~~~~~
compilation terminated.