2019.03.25 NOIP训练 匹配(match)(贪心)
题意简述:
思路:
直接考虑把人和物品都看成二维平面上面的a,ba,ba,b两类点,然后一个aaa和bbb匹配的条件是xa≤xb&&ya≤ybx_a\le x_b\&\&y_a\le y_bxa≤xb&&ya≤yb,要求最后选出的bbb的横坐标之和最小。
这样的话,我们把a,ba,ba,b两类点分别按照xxx坐标排序,然后用类似归并排序的方法贪心选就行了。
贪心策略:从所有能够跟当前的bbb匹配的aaa类点中选一个yyy坐标最大的出来。
用setsetset维护即可。
代码:
#include<bits/stdc++.h>
#define fi first
#define se second
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
static char buf[rlen],*ib,*ob;
(ib==ob)&&((ob=(ib=buf)+fread(buf,1,rlen,stdin)));
return ib==ob?-1:*ib++;
}
inline int read(){
int ans=0;
char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
return ans;
}
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> pii;
int n,m;
ll ans=0;
pii a[N],b[N];
set<pii>S;
typedef set<pii>::iterator It;
inline bool check(It&it,int x){
if(it==S.begin())return it->fi<=x;
if(it==S.end()||it->fi>x)--it;
return 1;
}
int main(){
n=read(),m=read();
for(ri i=1;i<=n;++i)a[i].fi=read(),a[i].se=read();
for(ri i=1;i<=m;++i)b[i].fi=read(),b[i].se=read();
sort(a+1,a+n+1),sort(b+1,b+m+1);
int p1=1,p2=1;
while(p1<=n&&p2<=m){
if(a[p1].fi<=b[p2].fi)S.insert(pii(a[p1].se,p1)),++p1;
else{
if(S.size()){
It it=S.lower_bound(pii(b[p2].se,p1));
if(check(it,b[p2].se))S.erase(it),ans+=b[p2].fi;
}
++p2;
}
}
if(p1<=n)return puts("-1"),0;
while(S.size()){
if(p2>m)return puts("-1"),0;
It it=S.lower_bound(pii(b[p2].se,p1));
if(check(it,b[p2].se))S.erase(it),ans+=b[p2].fi;
++p2;
}
cout<<ans;
return 0;
}
2019.03.25 NOIP训练 匹配(match)(贪心)的更多相关文章
- 2019.03.29 NOIP训练 友好国度(点分治+容斥)
传送门 思路: 直接上点分治+容斥计算每个因数对应的贡献即可. 代码: #include<bits/stdc++.h> #define ri register int using name ...
- [2019.03.25]Linux中的查找
TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...
- 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)
传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...
- ARTS Challenge- Week 1 (2019.03.25~2019.03.31)
1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...
- zabbix学习笔记----概念----2019.03.25
1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP: 3)SSH/Telnet: 4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...
- 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- 2019.03.25 bzoj2329: [HNOI2011]括号修复(fhq_treap)
传送门 题意简述: 给一个括号序列,要求支持: 区间覆盖 区间取负 区间翻转 查询把一个区间改成合法括号序列最少改几位 思路: 先考虑静态的时候如何维护答案. 显然把所有合法的都删掉之后序列长这样: ...
随机推荐
- Zabbix客户端日志出现(Not all processes could be identified, 解决
场景:因为使用了netstat -p参数. 权限问题,zabbix_agentd是zabbix用户启动的,默认不能执行netstat -p等命令,导致从服务器取到的自动发现脚本为空 (Not all ...
- fsync和fdatasync
在看LevelDB源码的时候,看到PosixWritableFile类的Sync函数用到了fsync和fdatasync两个Linux系统调用来将文件的修改同步到磁盘上,所以粗浅的学习了一下这两个系统 ...
- word里如何将模板的样式(标题啊、字体啊)导入到另外的模板里
点进去
- Java8内置的函数式接口
JDK 1.8 API 包含了很多内置的函数式接口.其中就包括我们在老版本中经常见到的 Comparator 和 Runnable,Java 8 为他们都添加了 @FunctionalInterfac ...
- vue 下拉刷新 上拉加载(vue-scroller)
<template> <div class="wdRecordCon"> <x-header :left-options="{backTex ...
- jquery花式图片库——jqFancyTransitions
http://www.html580.com/3785 https://yq.aliyun.com/ziliao/4390 使用方法调用插件js文件: <script src="js/ ...
- View控件跟随鼠标移动
public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getAction() == MotionEve ...
- jquery 清空、添加、删除select
$("#selectid").empty();//清空 $("#selectid").append("<option value='" ...
- 4-20arget 属性和hover
1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...
- java_32 SQLyog中创建数据库表
USE test; /*1.创建账务表 id name mony*/ CREATE TABLE zhangwu(id INT PRIMARY KEY AUTO_INCREMENT, sname VAR ...