Submission #947341

#TimeUsernameProblemLanguageResultExecution timeMemory
947341amirhoseinfar1385Palembang Bridges (APIO15_bridge)C++17
100 / 100
152 ms8800 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=100000+10; long long n,k,fakeres,ps[maxn],suf[maxn]; vector<pair<long long,long long>>all; bool cmp(pair<long long,long long>a,pair<long long,long long>b){ return a.first+a.second<b.first+b.second; } void vorod(){ cin>>k>>n; for(long long i=0;i<n;i++){ char c,cc; long long d,dd; cin>>c>>d>>cc>>dd; if(d>dd){ swap(d,dd); } if(c==cc){ fakeres+=abs(dd-d); }else{ all.push_back(make_pair(d,dd)); fakeres++; } } n=(long long)all.size(); } priority_queue<long long>kam,ziad; long long sumkam=0,sumziad=0; void ins(int w){ sumkam+=w; kam.push(w); while((int)kam.size()>(int)ziad.size()||kam.top()>-ziad.top()){ sumkam-=kam.top(); sumziad+=kam.top(); ziad.push(-kam.top()); kam.pop(); } while((int)kam.size()<(int)ziad.size()||kam.top()>-ziad.top()){ sumkam+=-ziad.top(); sumziad-=-ziad.top(); kam.push(-ziad.top()); ziad.pop(); } while((int)kam.size()>(int)ziad.size()||kam.top()>-ziad.top()){ sumkam-=kam.top(); sumziad+=kam.top(); ziad.push(-kam.top()); kam.pop(); } while((int)kam.size()<(int)ziad.size()||kam.top()>-ziad.top()){ sumkam+=-ziad.top(); sumziad-=-ziad.top(); kam.push(-ziad.top()); ziad.pop(); } } void pre(){ sort(all.begin(),all.end(),cmp); for(long long i=0;i<n;i++){ ins(all[i].first); ins(all[i].second); ps[i]=sumziad-sumkam; } while((long long)kam.size()>0){ kam.pop(); ziad.pop(); } sumkam=0,sumziad=0; for(long long i=n-1;i>=0;i--){ ins(all[i].first); ins(all[i].second); suf[i]=sumziad-sumkam; } } void solve(){ if(k==1){ long long mainres=fakeres+ps[n-1]; cout<<mainres<<"\n"; return ; } long long mainres=fakeres+suf[0]; for(long long i=0;i<n;i++){ mainres=min(mainres,fakeres+suf[i+1]+ps[i]); } cout<<mainres<<"\n"; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("inp.txt","r",stdin); vorod(); pre(); 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...