Submission #17588

#TimeUsernameProblemLanguageResultExecution timeMemory
17588cometPalembang Bridges (APIO15_bridge)C++98
100 / 100
126 ms7032 KiB
#include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cstring> #include <cassert> #include <cstdlib> #include <ctime> using namespace std; typedef long long ll; int N,K,n; struct pp{ ll x,y; bool operator<(const pp& r)const{ return x+y<r.x+r.y; } }a[100010]; ll base; ll L[100010],R[100010]; priority_queue<ll> lo; priority_queue<ll,vector<ll>,greater<ll> > hi; ll loSum,hiSum; void init(){ while(!lo.empty())lo.pop(); while(!hi.empty())hi.pop(); loSum=hiSum=0; } void push(ll x){ if(lo.size()==hi.size())lo.push(x),loSum+=x; else hi.push(x),hiSum+=x; if(!lo.empty()&&!hi.empty()&&lo.top()>hi.top()){ ll a=lo.top(),b=hi.top(); lo.pop();hi.pop(); loSum-=a,hiSum-=b; lo.push(b),hi.push(a); loSum+=b,hiSum+=a; } } ll query(ll i){ i++; ll mid = lo.top(); return i*mid-loSum + hiSum-i*mid; } void f(ll d[]){ init(); for(ll i=0;i<n;i++){ push(a[i].x); push(a[i].y); d[i] = query(i); } } int main(){ scanf("%d%d",&K,&N); char t1,t2; ll x,y; for(int i=0;i<N;i++){ scanf(" %c %lld %c %lld",&t1,&x,&t2,&y); if(t1!=t2){ a[n].x=min(x,y); a[n++].y=max(x,y); base++; }else{ base+=abs(x-y); } } if(n==0){ printf("%lld\n",base); return 0; } sort(a,a+n); if(K==1){ f(L); printf("%lld\n",L[n-1]+base); }else{ f(L); reverse(a,a+n); f(R); ll ans = L[n-1]; for(int i=0;i<n-1;i++){ ans = min(ans,L[i]+R[n-2-i]); } printf("%lld\n",ans+base); } return 0; }

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:62:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&K,&N);
                     ^
bridge.cpp:66:42: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c %lld %c %lld",&t1,&x,&t2,&y);
                                          ^
#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...