Submission #1148326

#TimeUsernameProblemLanguageResultExecution timeMemory
1148326sbendyPalembang Bridges (APIO15_bridge)C++20
0 / 100
0 ms328 KiB
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef __int128 lll;
//typedef __float128 fl;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<ull> vull;
typedef vector<lll> vlll;
typedef pair<int, int> pi;
typedef pair<ll, ll> pll;
const ll INF = LONG_LONG_MAX - 1;
const int MOD = 1e9 + 7;
const int MOD2 = 998244353;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
const double PI = 3.14159265358979323846;
#define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define print(a) cout << (a) << "\n";
#define printPair(a) cout << (a).first << " " << (a).second << "\n";

#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
    for ( \
        auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
        blockTime.second; \
        debug("%s: %lld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
    )



//Mint fact[MAXN + 3];
//Mint inv[MAXN + 3];



double TOL = 1e-7;

void preload(){
    //  sieve(MAXN);
}


ll bS(const vector<ll>& b, const vector<ll>& psumEnd, ll x) {
    // Find the first index where b[i] >= x.
    int idx = lower_bound(b.begin(), b.end(), x) - b.begin();
    // For indices i < idx, we add (x - b[i]). The sum is then:
    // idx * x - (b[0] + b[1] + ... + b[idx-1])
    return idx * x - psumEnd[idx];
}

ll cS(const vector<ll>& c, const vector<ll>& psumStart, ll x) {
    // Find the first index where c[i] > x.
    int idx = upper_bound(c.begin(), c.end(), x) - c.begin();
    int n = c.size();
    // Sum of elements from idx to n-1 is psumStart[n] - psumStart[idx]
    ll sumOverElements = psumStart[n] - psumStart[idx];
    // Each of these (n-idx) elements contributes a subtraction of x.
    return sumOverElements - (n - idx) * x;
}


void solve(int& tc) {
    int k,n;
    cin >> k >> n;
    vector<pi> a;

    ll ans = 0;
    vll b;
    vll c;
    for (int i = 0; i < n; ++i){
        char z1,z2;
        int p1,p2;
        cin >> z1 >> p1 >> z2 >> p2;
        if (z1 == z2){
            ans += abs(p2-p1);
        } else {
            a.emplace_back(min(p1,p2),max(p1,p2));
            b.emplace_back(min(p1,p2));
            c.emplace_back(max(p1,p2));
        }
    }

    n = a.size();
    ans += n;

    sort(b.begin(),b.end());
    sort(c.begin(),c.end());

    ll s = 0;
    for (int i = 0; i < n; ++i)
        s += a[i].second-a[i].first;


    vll psumStart;
    psumStart.emplace_back(0);

    vll psumEnd;
    psumEnd.emplace_back(0);
    for (int i = 0; i < n; ++i){
        psumStart.emplace_back(psumStart.back() + b[i]);
        psumEnd.emplace_back(psumEnd.back() + c[i]);
    }

    ll gans = INF/3;
    for (int i = 0; i < n; ++i){
        ll x = a[i].first;
        ll temp = 2ll*(bS(c,psumEnd,x) + cS(b,psumStart,x));
        gans = min(gans,temp);

        x = a[i].second;
        temp = 2ll*(bS(c,psumEnd,x) + cS(b,psumStart,x));
        gans = min(gans,temp);
    }

    print(ans + s + gans);





}


int main() {
    fast_io;
    int t;
    t = 1;
  //  cin >> t;
    time__("solve") {
        preload();
        int x = 0;
        while (t-- > 0) {
            x++;
            solve(x);
        }
    }

    return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:32:15: warning: format '%lld' expects argument of type 'long long int', but argument 4 has type 'std::chrono::duration<long int, std::ratio<1, 1000> >::rep' {aka 'long int'} [-Wformat=]
   32 |         debug("%s: %lld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
      |               ^~~~~~~~~~~~~~~     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                                                                                                            |
      |                                                                                                                                            std::chrono::duration<long int, std::ratio<1, 1000> >::rep {aka long int}
bridge.cpp:27:36: note: in definition of macro 'debug'
   27 | #define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
      |                                    ^~~~~~~~~~~
bridge.cpp:135:5: note: in expansion of macro 'time__'
  135 |     time__("solve") {
      |     ^~~~~~
bridge.cpp:32:23: note: format string is defined here
   32 |         debug("%s: %lld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
      |                    ~~~^
      |                       |
      |                       long long int
      |                    %ld
#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...