Submission #1061058

#TimeUsernameProblemLanguageResultExecution timeMemory
1061058vjudge1Wiring (IOI17_wiring)C++17
55 / 100
184 ms12212 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define c second #define pt first int const N=2e5+5; ll const inf=1e16; ll dp[N]; ll n,m; vector<pair<ll,bool>> al; ll par[N]; ll pre[N]; ll compute(int l,int r){ if(l==0||pre[r]==0||l>=r) return inf; ll mi=pre[r]; ll y=par[mi]-par[l-1],x=par[r]-par[mi]; ll max_y=al[mi].pt,min_x=al[mi+1].pt; ll cx=r-mi,cy=mi-(l-1); ll v=(x-(max_y*cx))+(cy*max_y)-y; v+=max(0LL,(cy-cx))*(min_x-max_y); v+=min(dp[l],dp[l-1]); return v; } ll min_total_length(vector<int> r, vector<int> b){ n=r.size(); m=b.size(); al.push_back({-1,0}); for(int i:r) al.push_back({i,0}); for(int i:b) al.push_back({i,1}); sort(al.begin(), al.end()); for(int i=1;i<=n+m;i++) par[i]=par[i-1]+al[i].pt; for(int i=2;i<=n+m;i++){ if(al[i].c==al[i-1].c) pre[i]=pre[i-1]; else pre[i]=i-1; } for(int i=1;i<=n+m;i++) dp[i]=inf; for(int i=2;i<=n+m;i++){ dp[i]=min(compute(pre[i],i),compute(pre[pre[i]]+1,i)); ll mid=(pre[pre[i]]+pre[i]+1)/2; for(int j=min(pre[i],mid+100);j>max(pre[pre[i]],mid-100);j--) dp[i]=min(dp[i],compute(j,i)); } return dp[n+m]; } // int main(){ // int nn,mm; // cin>>nn>>mm; // vector<int> rr(nn),bb(mm); // for (int i = 0; i < nn; ++i) // cin>>rr[i]; // for (int i = 0; i < mm; ++i) // cin>>bb[i]; // cout<<min_total_length(rr,bb)<<endl; // }
#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...