Submission #537283

#TimeUsernameProblemLanguageResultExecution timeMemory
537283crystaalrooPalembang Bridges (APIO15_bridge)C++17
100 / 100
70 ms6608 KiB
#include <bits/stdc++.h> #define f first #define s second #define fore(i,a,b) for(int i = (a), ThxMK = (b); i < ThxMK; ++i) #define pb push_back #define all(s) begin(s), end(s) #define _ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define sz(s) int(s.size()) #define ENDL '\n' #define vv(type, name, h, ...) vector<vector<type>> name(h, vector<type>(__VA_ARGS__)) #define vvv(type, name, h, w, ...) vector<vector<vector<type>>> name(h, vector<vector<type>>(w, vector<type>(__VA_ARGS__))) using namespace std; long long gcd(long long a, long long b){ return b? gcd(b, a%b) : a; } long long lcm(long long a, long long b){ return (!a or !b)? 0 : a * b / gcd(a,b); } long long poww(long long a, long long b){ long long res = 1; while(b){ if(b%2) res = res * a ; a = a * a; b>>=1; } return res; } // mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); // int rnd(int n){return uniform_int_distribution<int>(0, n-1)(rng);} template <typename T> static constexpr T inf = numeric_limits<T>::max() / 2; template<class t,class u>bool mmax(t&a,u b){if(a<b)a=b;return a<b;} template<class t,class u>bool mmin(t&a,u b){if(b<a)a=b;return b<a;} template<class t> using vc=vector<t>; template<class t> using vvc=vc<vc<t>>; using li = long long; using vi = vc<int>; using ii = pair<int,int>; // ('-')7 int main(){_ auto solve=[&](){ int n,k; cin>>k>>n; li sum = 0; vector<ii>v; fore(i,0,n){ char a,b; int c,d; cin>>a>>c>>b>>d; if(a==b)sum+=abs(c-d); else{ sum+=1; v.pb({c,d}); } } if(sz(v)==0){ cout<<sum<<ENDL; return; } n = sz(v); sort(all(v),[&](ii a, ii b){return a.f+a.s<b.f+b.s;}); priority_queue<int>l; priority_queue<int,vi,greater<int>>r; li ls = 0, rs = 0; auto f=[&](int u){ int mid = sz(l)?l.top():inf<int>; if(u<=mid){ l.push(u); ls+=u; } else{ r.push(u); rs+=u; } if(sz(r)+1<sz(l)){ int nx = l.top(); l.pop(); r.push(nx); ls-=nx; rs+=nx; } else if(sz(r)>sz(l)){ int nx = r.top(); r.pop(); l.push(nx); rs-=nx; ls+=nx; } }; vc<li>pref(n,0); vc<li>suf(n,0); fore(i,0,n){ f(v[i].f); f(v[i].s); pref[i]=rs-ls; } rs = 0, ls = 0; r=priority_queue<int,vi,greater<int>>(); l = priority_queue<int>(); for(int i = n-1;i>=0;i--){ f(v[i].f); f(v[i].s); suf[i]=rs-ls; } li sol = pref[n-1]; if(k==2)fore(i,0,n-1)sol = min(sol,pref[i]+suf[i+1]); cout<<sol+sum<<ENDL; }; //int t; cin>>t; while(t--) solve(); }
#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...