Submission #1308621

#TimeUsernameProblemLanguageResultExecution timeMemory
1308621simplemind_31Palembang Bridges (APIO15_bridge)C++20
22 / 100
38 ms2220 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define ALL(x) x.begin(),x.end() using namespace __gnu_pbds; using namespace std; typedef long long ll; typedef tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update> intset; char t1,t2; int k,n,a,b; ll lad,res,sumade,sumaiz; bool cmp(pair<int,int> a,pair<int,int> b){return a.first+a.second<b.first+b.second;}; int main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> k >> n; vector<pair<int,int>> nums; vector<int> dif; for(int i=0;i<n;i++){ cin >> t1 >> a >> t2 >> b; if(t1==t2)lad+=abs(a-b); else{ dif.push_back(a); dif.push_back(b); nums.push_back({min(a,b),max(a,b)}); } } sort(ALL(nums),cmp); n=nums.size(); sort(ALL(dif)); for(int i=0;i<dif.size();i++){ res+=abs(dif[i]-dif[dif.size()/2]); } res+=n; if(k==1){ cout << lad+res; return 0; } sort(ALL(nums),cmp); intset de; vector<ll> sumaaaa(n); for(int i=0;i<n;i++){ if(de.empty()){ de.insert(nums[i].first); }else{ ll valmedante=*de.find_by_order(de.size()/2); sumade+=abs(valmedante-nums[i].first); de.insert(nums[i].first); if(nums[i].first<valmedante){ //nada ll valmednow=*de.find_by_order(de.size()/2); sumade-=(valmedante-valmednow); //sumade+=(valmedante-valmednow)*(de.size()-de.size()/2-1); //sumade-=(valmedante-valmednow)*(de.size()/2+1); } } ll valmedante=*de.find_by_order(de.size()/2); sumade+=abs(valmedante-nums[i].second); de.insert(nums[i].second); /*if(nums[i].second>valmedante){ ll valmednow=*de.find_by_order(de.size()/2); sumade-=(valmedante-valmednow)*(de.size()-de.size()/2); sumade+=(valmedante-valmednow)*(de.size()/2); }*/ sumaaaa[i]=sumade; } for(int i=0;i<n-1;i++){ //de 0 a i pref, de i+1 a n-1 suf //quitar nums[i] del de ll valmedante=*de.find_by_order(de.size()/2); sumade-=abs(valmedante-nums[i].first); de.erase(de.find(nums[i].first)); if(nums[i].first>valmedante){ ll valmednow=*de.find_by_order(de.size()/2); sumade-=valmedante-valmednow; } valmedante=*de.find_by_order(de.size()/2); sumade-=abs(valmedante-nums[i].second); de.erase(de.find(nums[i].second)); res=min(res,sumade+sumaaaa[i]+n); } cout << lad+res; }
#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...