This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// And you curse yourself for things you never done
#include<bits/stdc++.h>
#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e5 + 10, inf = 1e9 + 10;
const ll INF = 1e18;
ll sv[maxn];
vector<pii> vec;
int pt;
set<int> All;
ll ANS;
void restart(){
vec.clear();
pt = -inf;
All.clear();
ANS = INF;
}
ll calc(int pos){
ll num = 0;
for(pii p : vec){
if(pos < p.F)
num+= p.F - pos;
if(p.S < pos)
num+= pos - p.S;
}
return num;
}
ll add(int f, int s){
pt = -inf;
ANS = INF;
All.insert(f), All.insert(s);
vec.PB({f, s});
while(true){
auto it = All.upper_bound(pt);
if(it == All.end())
break;
int nw = *it;
ll num = calc(nw);
if(num < ANS)
ANS = num, pt = nw;
else
break;
}
return ANS * 2;
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie();
int k, n;
cin >> k >> n;
ll sig = 0;
vector<pii> inp;
for(int i = 0; i < n; i++){
char a, b;
int l, r;
cin >> a >> l >> b >> r;
if(r < l)
swap(l, r);
sig+= r-l;
if(a != b){
sig++;
inp.PB({l, r});
}
}
sort(inp.begin(), inp.end(), [](pii a, pii b){ return a.F + a.S < b.F + b.S; } );
n = sz(inp);
if(n == 0)
return cout << sig << endl, 0;
restart();
for(int i = 0; i < n; i++){
sv[i + 1] = add(inp[i].F, inp[i].S);
}
restart();
ll ans = INF;
for(int i = n-1; i >= 0; i--){
ans = min(ans, sig + sv[i] + add(-inp[i].S, -inp[i].F));
}
if(k == 1)
ans = sig + sv[n];
return cout << ans << endl, 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |