#include <bits/stdc++.h>
using i64 = long long;
#define all(x) x.begin(),x.end()
struct my_set
{
i64 sum;
std::multiset<int>mp;
void insert(int x)
{
sum+=x;
mp.insert(x);
}
void erase(int x)
{
sum-=x;
mp.erase(mp.find(x));
}
int biggest()
{
return *mp.rbegin();
}
int smallest()
{
return *mp.begin();
}
void clear()
{
mp.clear();
sum=0;
}
};
my_set l,r;
void insert(int x,int y)
{
l.insert(std::min(x,y));
r.insert(std::max(x,y));
int from_l=l.biggest();
int from_r=r.smallest();
if(from_l>from_r)
{
l.erase(from_l);
r.erase(from_r);
l.insert(from_r);
r.insert(from_l);
}
assert(l.biggest()<=r.smallest());
}
i64 query()
{
return r.sum-l.sum;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int cer,n;
std::cin>>cer>>n;
std::vector<std::pair<int,int>>a;
i64 same_side=0,diff_side=0;
for(int i=0;i<n;i++)
{
int x,y;
char aa,b;
std::cin>>aa>>x>>b>>y;
if(aa==b)
{
same_side+=abs(y-x);
}
else
{
a.push_back({std::min(x,y) , std::max(x,y)});
}
}
int sz=int(a.size());
std::sort(all(a) , [&](std::pair<int,int>l,std::pair<int,int>r){
return l.first+l.second<r.first+r.second;
});
for(auto &c:a)
{
//std::cout<<c.first<<' '<<c.second<<'\n';
}
std::vector<i64>prefix(sz+1,0);
for(int i=0;i<sz;i++)
{
insert(a[i].first , a[i].second);
prefix[i+1]=query();
}
l.clear();
r.clear();
diff_side=prefix[sz];
if(cer==2)
{
for(int i=sz-1;i>=0;i--)
{
insert(a[i].first , a[i].second);
diff_side=std::min(diff_side , query()+prefix[i]);
}
}
//std::cout<<'\n'<<same_side<<' ';
std::cout<<same_side + diff_side + sz;
}
/*
1 5
B 0 A 4
B 1 B 3
A 5 B 7
B 2 A 6
B 1 A 7
*/
/*
2 5
B 0 A 4
B 1 B 3
A 5 B 7
B 2 A 6
B 1 A 7
same_diff=2
nesortate
[0,4]
[5,7]
[2,6]
[1,7]
toate punctele
[0,1,2,4,5,6,7,7]
0,1,2,4,
5,6,7,7
25-7+2
*/
# | 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... |