Skip to content

Instantly share code, notes, and snippets.

@junodeveloper
Created October 14, 2018 04:46
Show Gist options
  • Save junodeveloper/c1ddf0ce7523fb6449569e7d69f1687f to your computer and use it in GitHub Desktop.
Save junodeveloper/c1ddf0ce7523fb6449569e7d69f1687f to your computer and use it in GitHub Desktop.
AGC028. Problem C
#include <bits/stdc++.h>
#define sz(x) ((int)x.size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
int n, A[100010], B[100010], P[100010][2];
ll s[200010];
vector<pair<int,int> > v;
int main() {
memset(P, -1, sizeof(P));
scanf("%d", &n);
ll r1 = 0, r2 = 0;
for(int i=1; i<=n; i++) {
scanf("%d%d", A+i, B+i);
r1 += A[i]; r2 += B[i];
v.push_back({A[i], i});
v.push_back({B[i], i});
}
sort(all(v));
for(int i=0; i<sz(v); i++) {
s[i] += v[i].first;
s[i+1] += s[i];
if(P[v[i].second][0] == -1) P[v[i].second][0] = i;
else P[v[i].second][1] = i;
}
ll r = min(r1, r2);
for(int i=1; i<=n; i++) {
ll val = 0;
if(n == 2);
else if(n-3 < P[i][0]) val = s[n-3];
else if(n-3 >= P[i][1]) val = s[n-1] - A[i] - B[i];
else if(n-2 == P[i][1]) val = s[n-1] - A[i] - B[i];
else val = s[n-2] - v[P[i][0]].first;
r = min(r, val + A[i] + B[i]);
}
printf("%lld", r);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment