4071: [Apio2015]巴邻旁之桥
Description
一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B。
Input
输入的第一行包含两个正整数 K 和 N,分别表示桥的上限数量和居民的数量。
Output
输出仅为一行,包含一个整数,表示 D1+D2+⋯+DN 的最小值。
Sample Input
B 0 A 4
B 1 B 3
A 5 B 7
B 2 A 6
B 1 A 7
Sample Output
HINT
子任务
题解:
http://www.cnblogs.com/xkui/p/4536421.html
code:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long int64;
const int maxn=;
char c1[],c2[];
int k,n,l,r,cnt,tot,a[maxn],b[maxn];
int64 ans;
struct Data{
int l,r,idl,idr,v;
}list[maxn];
bool cmp(const Data &x,const Data &y){return x.v<y.v;}
struct seg{
#define ls k<<1
#define rs (k<<1)+1
int cnt[maxn<<];
void modify(int k,int l,int r,int x,int v){
cnt[k]+=v;
if (l==r) return;
int m=(l+r)>>;
if (x<=m) modify(ls,l,m,x,v); else modify(rs,m+,r,x,v);
}
void modify(int x,int v){modify(,,tot,x,v);}
int query(int rank){
int k=,l=,r=tot,m;
while (l<r){
m=(l+r)>>;
if (rank<=cnt[ls]) r=m,k=ls;
else rank-=cnt[ls],l=m+,k=rs;
}
return l;
}
}T[];
void prepare(){
for (int i=;i<=cnt;i++) b[++tot]=list[i].l,b[++tot]=list[i].r;
sort(b+,b+tot+);
for (int i=;i<=cnt;i++){
list[i].idl=lower_bound(b+,b+tot+,list[i].l)-b;
list[i].idr=lower_bound(b+,b+tot+,list[i].r)-b;
}
}
int64 solve(){
int64 res=,ans1=,ans2=,m1=,m2=;
prepare();
for (int i=;i<=cnt;i++) T[].modify(list[i].idl,+),T[].modify(list[i].idr,+);
for (int i=;i<=cnt;i++) list[i].v=list[i].l+list[i].r;
sort(list+,list+cnt+,cmp),m2=b[cnt+];
for (int i=;i<=cnt;i++) ans2+=abs(list[i].l-m2),ans2+=abs(list[i].r-m2);
res=ans2;
for (int i=;i<=cnt;i++){
ans2-=abs(list[i].l-m2)+abs(list[i].r-m2);
T[].modify(list[i].idl,+),T[].modify(list[i].idr,+),m1=b[T[].query(i)];
T[].modify(list[i].idl,-),T[].modify(list[i].idr,-),m2=b[T[].query(cnt-i+)];
ans1+=abs(list[i].l-m1)+abs(list[i].r-m1);
res=min(res,ans1+ans2);
}
return res;
}
int main(){
scanf("%d%d",&k,&n);
if (k==){
for (int i=;i<=n;i++){
scanf("%s%d%s%d",c1,&l,c2,&r);
if (l>r) swap(l,r);
if (c1[]==c2[]) ans+=r-l;
else a[++tot]=l,a[++tot]=r,ans++;
}
sort(a+,a+tot+);
int res=a[tot/];
for (int i=;i<=tot;i++) ans+=abs(a[i]-res);
printf("%lld\n",ans);
}
else{
for (int i=;i<=n;i++){
scanf("%s%d%s%d",c1,&l,c2,&r);
if (l>r) swap(l,r);
if (c1[]==c2[]) ans+=r-l;
else ans++,list[++cnt]=(Data){l,r};
}
printf("%lld\n",ans+solve());
}
return ;
}
4071: [Apio2015]巴邻旁之桥的更多相关文章
- bzoj 4071: [Apio2015]巴邻旁之桥【splay】
用权值线段树会容易一些并快一些,但是想复健一下splay所以打了splay 然后果然不会打了. 解题思路: 首先把家和办公室在同一侧的提出来直接加进答案里: 对于k=1,直接选所有办公室和家的中位数即 ...
- 【BZOJ4071】[Apio2015]巴邻旁之桥 Treap
[BZOJ4071][Apio2015]巴邻旁之桥 Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 ...
- BZOJ4071 & 洛谷3644 & UOJ112:[APIO2015]巴邻旁之桥——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4071 https://www.luogu.org/problemnew/show/P3644 ht ...
- [bzoj4071] [Apio2015]巴邻旁之桥
Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 10000 ...
- [APIO2015]巴邻旁之桥
Bzoj权限题 luogu题面 先去掉同边的 首先k==1,即求一个点j 使\(\sum_{i\in A} |D_i - D_j| + \sum_{i\in B} |D_i - D_j|\)最小 因为 ...
- 洛谷 P3644 [APIO2015]八邻旁之桥 解题报告
P3644 [APIO2015]八邻旁之桥 题目描述 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域\(A\)和区域\(B\). 每一块区域沿着河岸都建了恰好\(1000000001\)栋的建筑 ...
- [APIO2015]八邻旁之桥——非旋转treap
题目链接: [APIO2015]八邻旁之桥 对于$k=1$的情况: 对于起点和终点在同侧的直接计入答案:对于不在同侧的,可以发现答案就是所有点坐标与桥坐标的差之和+起点与终点不在同一侧的人数. 将所有 ...
- 【BZOJ4071】【APIO2015】巴邻旁之桥
题意: Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1 ...
- [BZOJ4071][APIO2015]八邻旁之桥
BZOJ(这题是BZOJ权限题,有权限号的就去看看吧) Luogu(良心洛谷) 题目描述 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域\(A\)和区域\(B\). 每一块区域沿着河岸都建了恰好 ...
随机推荐
- MySQL【第二篇】基本命令
一.连接MySQL 登录 mysql 有两种方式: 远程主机:mysql -h主机地址 -u用户名 -p密码 -P端口号 本机:mysql -h主机地址 -u用户名 -p密码 -P端口号 如果端口号是 ...
- 正则表达式 和 junit测试
需要知道一些常规的正则表达式语句,然后可以仿照规则写出一下正则表达式语句.然后是关于junit测试. 知道了一个之前看过的文档,然后有功夫就看一下那个文档就可以,或者后面找时间搜索一下. 正则表达式是 ...
- PHP Fatal error问题处理
今天一个朋友公司网站遇到一个关于PHP的问题: PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to ...
- (转) ASP.NET页面缓存
原文:http://www.cnblogs.com/Sky_KWolf/archive/2010/12/05/1897158.html 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的 ...
- Linq 的IQueryable和IEnumerable方式
IEnumerable方式: public IEnumerable<WebManageUsers> GetWebManageUsers(ISpecification<WebManag ...
- No application 'meetme' for extension 错误
在asterisk中搭建简单会议室,在extensions.conf中执行到 exten => 18,n,MeetMe(18,p) asterisk控制台提示:Aug 6 8:28:41 WAR ...
- OC - 3.OC的三大特性
一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...
- CSS和JS样式属性对照表
注意:1.CSS中的float属性是个例外,因为float是javascript的保留关键字,在IE中使用的是styleFloat,而其他浏览器则使用cssFloat. 盒子标签和属性对照 CSS语法 ...
- HDU 3127 WHUgirls(DP 完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3127 题目大意:将一块长x宽y的矩形布料,剪成小的矩形(每个给定的小矩形都对应一个价值),使得所有小矩 ...
- 文件(夹)比较 Beyond Compare, Diff
文件(夹)比较 Beyond Compare, Diff, UltraCompare 1.Beyond Compare(无与伦比) 2.Diff 参考 1.diff详解