Submission #1220987

#TimeUsernameProblemLanguageResultExecution timeMemory
1220987abdelhakimMeetings (IOI18_meetings)C++20
0 / 100
49 ms24004 KiB
#include "meetings.h" #include <bits/stdc++.h> #define ll long long #define inf (ll)1e17 #define dbg(x) cerr<< #x << ' ' << x << endl; using namespace std; ll maxn=1e5; vector<vector<ll>> tree(4*maxn+3,vector<ll>(3)); vector<vector<ll>> lr; void merge(ll node, ll l, ll r) { tree[node][0]=max({tree[node*2+1][0],tree[node*2+2][0],tree[node*2+1][2]+tree[node*2+2][1]}); if(lr[l][1]!=-1) { tree[node][1]=(lr[l][1]-l)+1; } if(lr[r][0]!=-1) { tree[node][0]=r-lr[r][0]+1; } tree[node][1]=min(tree[node][1],r-l+1); tree[node][0]=min(tree[node][0],r-l+1); } void update(ll node, ll l, ll r, ll pos) { if(pos < l || pos > r)return; if(l==r) { tree[node]={1,1,1}; return; } ll mid=(l+r)>>1; update(node*2+1,l,mid,pos); update(node*2+2,mid+1,r,pos); merge(node,l,r); } ll query(ll node, ll l, ll r, ll x, ll y) { if(max(l,x) > min(r,y)) return 0; if(x<=l && r<=y) { return tree[node][0]; } ll mid=(l+r)>>1; ll qr1=query(node*2+1,l,mid,x,y); ll qr2=query(node*2+2,mid+1,r,x,y); ll val1=0; ll val2=0; if(lr[mid][0]!=-1) { val1=min(mid-l+1,mid-lr[mid][0]+1); } if(lr[mid+1][1]!=-1) { val2=min(r-mid,lr[mid+1][1]-mid); } return max({val1+val2,qr1,qr2}); } std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L,std::vector<int> R) { ll n=H.size(); ll q=L.size(); ll l=-1; ll r=-1; lr.assign(n,vector<ll>(2,-1)); for (int i=0;i<n;i++) { if(H[i]==1 && (i==0 || H[i-1]==2)) { l=i; } if(H[i]==1 && (i==n-1 || H[i+1]==2)) { r=i; } if(l==-1 || r==-1)continue; for (int j=l;j<=r;j++) { lr[j][0]=l; lr[j][1]=r; } l=-1; r=-1; } for (int i=0;i<n;i++) { if(H[i]==1) { update(0,0,n-1,i); } } vector<ll> ans(q); for (int i=0;i<q;i++) { ans[i]=2*(R[i]-L[i]+1)-query(0,0,n-1,L[i],R[i]); } return ans; }
#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...