Submission #1342176

#TimeUsernameProblemLanguageResultExecution timeMemory
1342176xnoelPalembang Bridges (APIO15_bridge)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main() {
    //freopen("1.in","r",stdin);
    int k,n;
    cin >> k >> n;
    int ans=0;
    vector<int> coord;
    coord.reserve(2*n);
    vector<pair<int,int>> vp;
    vp.reserve(n);
    for (int i=0;i<n;i++) {
        char c1,c2;
        int x,y;
        cin >> c1 >> x >> c2 >> y;
        if (c1==c2) ans+=abs(x-y);
        else {
            vp.push_back({x,y});
            coord.push_back(x);
            coord.push_back(y);
        }
    }
    sort(coord.begin(),coord.end());
    coord.erase(unique(coord.begin(),coord.end()),coord.end());
    vector<int> mp(coord.size()+1,0);
   
    for (auto [x,y]:vp) {
        int idx1=lower_bound(coord.begin(),coord.end(),x)-coord.begin();
        int idx2=lower_bound(coord.begin(),coord.end(),y)-coord.begin();
        mp[idx1]++;
        mp[idx2+1]--;
    }
    vector<int> diff(coord.size()+1,0);
    for (int i=0;i<coord.size()+1;i++) {
        diff[i]=mp[i];
        if (i>0) diff[i]+=diff[i-1];
    }

    int max_diff=0, max_diff_idx=0;
    for (int i=0;i<coord.size()+1;i++) {
        if (diff[i]>max_diff) {
            max_diff=diff[i];
            max_diff_idx=i;
        }
    }

    int mark=coord[max_diff_idx];

    for (auto [x,y]:vp) {
        int idx1=lower_bound(coord.begin(),coord.end(),x)-coord.begin();
        int idx2=lower_bound(coord.begin(),coord.end(),y)-coord.begin();
        if (x<=max_diff_idx && y>=max_diff_idx) ans+=abs(x-y);
        else ans+=abs(x-mark)+abs(y-mark);
    }
    cout<<ans<<"\n";
    return 0;
}
#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...