#include <bits/stdc++.h>
using namespace std;
int main()
{
long long K, N;
cin >> K >> N;
long long tot = 0;
vector<vector<long long>> Tab;
long long buff = 0;
for (long long i = 0; i < N; i++)
{
long long b, d;
char a, c;
cin >> a >> b >> c >> d;
tot += abs(b - d);
if (a == c)
{
continue;
}
Tab.push_back({b + d, min(b, d), max(b, d)});
buff++;
tot++;
}
long long add = 0;
sort(Tab.begin(), Tab.end());
vector<long long> ans(buff);
N = buff;
priority_queue<pair<long long, long long>> left, right;
left.push({-1000000000, 0});
right.push({-1000000000, 0});
long long cur = 0, rig = 0;
for (long long i = 0; i < N; i++)
{
if (Tab[i][1] < left.top().first)
left.push({Tab[i][1], 0});
else
{
right.push({-Tab[i][1], 0});
add += (Tab[i][1] - left.top().first) * 2;
rig++;
}
right.push({-Tab[i][2], 1});
if (right.size() > left.size())
{
add += (-right.top().first - left.top().first) * (cur - rig) * 2;
left.push({-right.top().first, right.top().second});
if (right.top().second == 0)
rig--;
else
cur++;
right.pop();
}
ans[i] = add;
}
while (left.size())
left.pop();
while (right.size())
right.pop();
cur = 0, rig = 0, add = 0;
left.push({-1000000000, 0});
right.push({-1000000000, 0});
for (long long i = N - 1; i > 0; i--)
{
if (Tab[i][2] > -left.top().first)
left.push({-Tab[i][2], 0});
else
{
right.push({Tab[i][2], 0});
add += (-left.top().first - Tab[i][2]) * 2;
rig++;
}
right.push({Tab[i][1], 1});
if (right.size() > left.size())
{
add += (-right.top().first - left.top().first) * (cur - rig) * 2;
left.push({-right.top().first, right.top().second});
if (right.top().second == 0)
rig--;
else
cur++;
right.pop();
}
ans[i - 1] += add;
}
if (K == 1)
{
cout << tot + ans[N - 1];
return 0;
}
long long minn = ans[0];
for (long long i = 0; i < N; i++)
minn = min(minn, ans[i]);
cout << tot + minn;
}
# | 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... |