Submission #1237350

#TimeUsernameProblemLanguageResultExecution timeMemory
1237350dostsMeetings (IOI18_meetings)C++20
17 / 100
87 ms16712 KiB
#include "meetings.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") #define int long long #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() #define big(x) ((int)(x.size())) using namespace std; const int MOD = 1e9+7, LIM = 5e3+1, inf = 2e9; vi h; struct Node { int ans,pref,suf,sz; }; Node merge(Node a,Node b) { Node ret; ret.ans = max({a.ans,b.ans,a.suf+b.pref}); ret.pref = (a.pref == a.sz)?(a.pref+b.pref):a.pref; ret.suf = (b.suf == b.sz)?(a.suf+b.suf):b.suf; ret.sz = a.sz+b.sz; return ret; } struct ST { vector<Node> t; void build(int node,int l,int r) { if (l == r) { t[node] ={0,0,0,1}; return; } int m = (l+r) >> 1; build(2*node,l,m),build(2*node+1,m+1,r); t[node] = merge(t[2*node],t[2*node+1]); } ST(int nn) { t.resize(4*nn+1); build(1,1,nn); } void update(int node,int l,int r,int p,int v) { if (!v) return; if (l == r) { t[node] = {1,1,1,1}; return; } int m = (l+r) >> 1; if (p <= m) update(2*node,l,m,p,v); else update(2*node+1,m+1,r,p,v); t[node] = merge(t[2*node],t[2*node+1]); } Node query(int node,int l,int r,int L,int R) { if (l > R || r < L) return {0,0,0,1}; if (l >= L && r <= R) return t[node]; int m = (l+r) >> 1; return merge(query(2*node,l,m,L,R),query(2*node+1,m+1,r,L,R)); } }; vi minimum_costs(std::vector<signed> H, std::vector<signed> L, std::vector<signed> R) { ST st(big(H)); h = vi(all(H)); for (int i = 0;i<big(H);i++) st.update(1,1,big(H),i+1,h[i] == 1); vi answer(big(L)); for (int i = 0;i<big(L);i++) { answer[i] = 2*(R[i]-L[i]+1)-st.query(1,1,big(H),L[i]+1,R[i]+1).ans; } return answer; }
#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...