Submission #349968

#TimeUsernameProblemLanguageResultExecution timeMemory
349968denkendoemeerPalembang Bridges (APIO15_bridge)C++14
100 / 100
142 ms5888 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll v[100005],s1,s2;
int mij;
vector<pair<int,int>>poz;
priority_queue<int>pq;
priority_queue<int,vector<int>,greater<int>>pq2;
void update(int x)
{
    if (x<mij)
        pq.push(x),s1+=x;
    else
        pq2.push(x),s2+=x;
    if (pq.size()+2<=pq2.size()){
        pq.push(mij);
        s1+=mij;
        mij=pq2.top();
        pq2.pop();
        s2-=mij;
    }
    else
        if (pq.size()>=pq2.size()+2){
            pq2.push(mij);
            s2+=mij;
            mij=pq.top();
            pq.pop();
            s1-=mij;
        }
}
int cmp(pair<int,int>a,pair<int,int>b)
{
    return a.second+a.first<b.first+b.second;
}
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int k,n,i;
    ll ans=0;
    scanf("%d%d",&k,&n);
    for(i=0;i<n;i++){
        char ch1,ch2;
        pair<int,int>x;
        cin>>ch1>>x.first>>ch2>>x.second;
        if (ch1!=ch2){
            poz.push_back(x);
            ++ans;
        }
        else
            ans+=abs(x.first-x.second);
    }
    sort(poz.begin(),poz.end(),cmp);
    for(i=0;i<poz.size();i++){
        update(poz[i].first);
        update(poz[i].second);
        v[i+1]=s2-(ll)pq2.size()*mij+((ll)pq.size()-1)*mij-s1;
    }
    ll ans2=v[poz.size()];
    if (k==2){
        pq=priority_queue<int>();
        pq2=priority_queue<int,vector<int>,greater<int>>();
        mij=s1=s2=0;
        for(i=poz.size()-1;i>0;i--){
            update(poz[i].first);
            update(poz[i].second);
            ans2=min(ans2,v[i]+s2-(ll)pq2.size()*mij+((ll)pq.size()-1)*mij-s1);
        }
    }
    printf("%lld\n",ans+ans2);
return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:54:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for(i=0;i<poz.size();i++){
      |             ~^~~~~~~~~~~
bridge.cpp:41:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   41 |     scanf("%d%d",&k,&n);
      |     ~~~~~^~~~~~~~~~~~~~
#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...