Submission #1213356

#TimeUsernameProblemLanguageResultExecution timeMemory
1213356LIAIdeal city (IOI12_city)C++17
0 / 100
11 ms580 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef tuple<ll, ll, ll> plll;
typedef vector<plll> vplll;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<pll> vpll;
typedef vector<vector<pll>> vvpll;
typedef vector<vector<ll>> vvll;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
#define loop(i, s, e) for (ll i = (s); i < (e); ++i)
#define loopr(i, e, s) for (ll i = (e)-1; i >= (s); --i)
#define all(a) a.begin(), a.end()
const ll inf = 1000000000;  
ll ans = 0;
ll n;

typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ost;

int DistanceSum(int N, int *x, int *y) {
  n = N;
  ans = 0;             
  ost xi, yi;
  loopr(i, n, 0) {
    ll bigger = xi.size() - xi.order_of_key(x[i] + 1);
    ll smaller = xi.order_of_key(x[i]);
    ll delta_x = (-bigger * x[i] + smaller * x[i]) % inf;
    if (delta_x < 0) delta_x += inf;
    ans = (ans + delta_x) % inf;

    bigger = yi.size() - yi.order_of_key(y[i] + 1);
    smaller = yi.order_of_key(y[i]);
    ll delta_y = (-bigger * y[i] + smaller * y[i]) % inf;
    if (delta_y < 0) delta_y += inf;
    ans = (ans + delta_y) % inf;

    xi.insert(x[i]);
    yi.insert(y[i]);
  }

  xi.clear();
  yi.clear();
  loop(i, 0, n) {
    ll bigger = xi.size() - xi.order_of_key(x[i] + 1);
    ll smaller = xi.order_of_key(x[i]);
    ll delta_x = (-bigger * x[i] + smaller * x[i]) % inf;
    if (delta_x < 0) delta_x += inf;
    ans = (ans + delta_x) % inf;

    bigger = yi.size() - yi.order_of_key(y[i] + 1);
    smaller = yi.order_of_key(y[i]);
    ll delta_y = (-bigger * y[i] + smaller * y[i]) % inf;
    if (delta_y < 0) delta_y += inf;
    ans = (ans + delta_y) % inf;

    xi.insert(x[i]);
    yi.insert(y[i]);
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...