Description

【引子】

桥上的恋人入对出双

桥边红药叹夜太漫长

月也摇晃人也彷徨

乌蓬里传来了一曲离殇

庐州月光洒在心上

月下的你不复当年模样

太多的伤难诉衷肠

叹一句当时只道是寻常

庐州月光梨花雨凉

如今的你又在谁的身旁

家乡月光深深烙在我心上

却流不出当年泪光——Vae《庐州月》

【问题描述】

小 G 是出生在庐州的一位同学,当他高中毕业后,回到了自己的家乡。然而家乡已不复当年模样,在高中表现优秀的小G 决定承担起家乡的一件重任,那就是修理已经破烂不堪的石桥。

家乡中共有n 个石桥等待修理,对于第i 个石桥,我们定义两个参数pi,vi,其中pi表示修理石桥的最小花费值,vi表示石桥需要的最小美化需求度。今天,小G 已了解到修理厂共有m 种不同的修理原料,对于第i 种原料,可以对任意

一个石桥的美化度增加di,当然这也需要花费hi的费用。由于发货场的修理原料有限,对于任意一种修理原料,只有一件,也就是说小G 只能选择购买和不购买,对于第i 种修理材料能成功修理第j 个石桥的条件是:当且仅当hi ≥ pj,di ≥vj。现在,已知这n 个石桥修理的最小花费值,最小美化需求度,以及m种修理原料的费用,可对石桥增加的美化度值,请你帮助小G完成这个修理任务。

Input

第一行包括两个正整数,n,m。

接下来 n 行中,每行包括两个正整数pi,vi。

接下来 m行中,每行包括两个正整数hi,di。

Output

只有一个整数,为最小修理花费。如果无法完成修理任务,则输出一个整数

-1。

Sample Input

2 3

2 3

5 9

3 10

3 5

6 11

Sample Output

9

【样例说明】

其中一种可行的方案是:使用第1 种材料,修理第1 个石桥,使用第3 种材

料,修理第2 个石桥,最小修理花费为3 + 6 = 9。

Data Constraint

Solution

  • 这是一道典型的贪心题!

  • 把石桥和修理方法都按美化需求度从大到小排序,一个一个石桥修理。

  • 那么维护两个指针,对于一个石桥,就能知道“可能”可以修理的那些方案。

  • 之后,排除掉之前已经选过的那些,其中必有一个最佳方案。

  • 显然, 最佳的一定是花费大于等于当前石桥且其花费最小的!

  • 可是维护这样的集合有一些困难,复杂度一般为 O(NlogN)O(Nlog N)

  • 这样再加上扫描本身的 O(N)O(N),是会时间超限的。

  • 于是我们的平衡树算法——Splay,就隆重登场了!

  • 只需基本的插入、删除和求后继操作就可以在 O(logN)O(logN) 内实现了。

Code

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100001;
struct data
{int x,y;
}a[N],b[N];
int root,tot;
int s[N][2],fa[N],key[N];
long long ans;
inline int read()
{int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data;
}
inline bool cmp(data a,data b)
{return a.y>b.y;
}
inline bool pd(int x)
{return x==s[fa[x]][1];
}
inline void rotate(int x)
{int y=fa[x],w=pd(x);if(fa[x]=fa[y]) s[fa[y]][pd(y)]=x;fa[s[y][w]=s[x][w^1]]=y;s[fa[y]=x][w^1]=y;
}
inline void splay(int x)
{for(int y;y=fa[x];rotate(x))if(fa[y]) rotate(pd(x)==pd(y)?y:x);root=x;
}
inline int search(int x,int v)
{while(key[x]!=v)if(v<key[x]){if(!s[x][0]) break;x=s[x][0];}else{if(!s[x][1]) break;x=s[x][1];}return x;
}
inline void ins(int &x,int y,int v)
{if(!x){x=++tot;key[x]=v;fa[x]=y;return;}ins(s[x][key[x]<=v],x,v);
}
inline void del(int v)
{int k=search(root,v);splay(k);if(!s[k][0]){fa[root=s[k][1]]=0;key[k]=s[k][1]=0;return;}fa[s[k][0]]=0;splay(search(s[k][0],1e9));if(s[root][1]=s[k][1]) fa[s[root][1]]=root;key[k]=s[k][0]=s[k][1]=0;
}
inline int find(int v)
{if(!root) return 0;int x=root;while(true){if(key[x]<v){if(!s[x][1]) return 0;x=s[x][1];continue;}if(s[x][0]){int y=s[x][0];while(key[y]<v && s[y][1]) y=s[y][1];if(key[y]>=v){x=y;continue;}}return x;}
}
int main()
{int n=read(),m=read();for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();for(int i=1;i<=m;i++) b[i].x=read(),b[i].y=read();sort(a+1,a+1+n,cmp);sort(b+1,b+1+m,cmp);for(int i=1,j=1;i<=n;i++){while(j<=m && b[j].y>=a[i].y){ins(root,0,b[j++].x);splay(tot);}int k=find(a[i].x);if(!k){printf("-1");return 0;}ans+=key[k];del(key[k]);}printf("%lld",ans);return 0;
}

JZOJ 3731. 【NOIP2014模拟7.10】庐州月相关推荐

  1. JZOJ.4377[GDOI2016模拟3.10]习用之语 解题报告

    习用之语 题目大意 给出 N N个长度为4的字符串,求出仅差DD个字符的字符串的对数. 输入格式 第一行两个正整数 N N,DD. 接下来 N N行,每行一个长度为4的字符串. 输出格式 一行,一个整 ...

  2. 计算机二级vfp模拟考试题,计算机等级考试二级VFP模拟练习题[10]

    计算机等级考试二级VFP模拟练习题[10] 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 226.下列各表达式中,结果总是逻辑值的是(D ) A.算术运算表达式 B.字符运算表达 ...

  3. jzoj2702. 探险jzoj3917. 【NOIP2014模拟11.2A组】福慧双修

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

  4. 备战Noip2018模拟赛10(B组) T1 Max 和最大

    10月20日备战Noip2018模拟赛10 T1 Max和最大 题目描述 CYF的黑题,偏题,怪题,黑科技题,大码农题都做腻了,于是她想做一下签到水题,她希望从有一个长度为ň的整数序列(A1,A2,. ...

  5. 全国计算机等级考试全真模拟,全国计算机等级考试全真模拟试卷(10)

    全国计算机等级考试全真模拟试卷(10) (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 全国计算机等级考试全真模拟试卷(I 0)一级MS ...

  6. 厦门大学c语言在线测试,厦门大学《C语言》模拟试卷(10级).doc

    厦门大学<C语言>模拟试卷(10级).doc C语言程序设计试题A答案考生信息栏 经济 学院 计统 系 专业 2010 年级姓名 学号装 订 线一.单项选择题每题2分,共60分 注意答案纸 ...

  7. Cisco PT模拟实验(10) 路由器的基本配置

    Cisco PT模拟实验(10) 路由器的基本配置 实验目的: 掌握路由器几种常用配置方法 熟悉路由器不同的命令行操作模式 掌提路由器的基本配置命令 实验背景: 作为网络管理员,你第一次在设备机房对路 ...

  8. JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码

    Description 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度< n do { ...

  9. JZOJ 3886. 【长郡NOIP2014模拟10.22】道路维护

    Description 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成 ...

最新文章

  1. Eclipse安装插件时报No repository found containing...解决办法
  2. Android 文件的存储和加载
  3. samba服务器新建文件权限,Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析...
  4. 简易自动电阻测试仪_开始自动测试您的网站的简单方法
  5. 15 —— npm —— package.json 与 package-lock.json 的作用
  6. 带参数标签的取值方法
  7. 转载:做了5年运维,靠着这份监控知识体系,我从3K变成了40K
  8. PPC WM5 输入法屏蔽插件
  9. 7.28-说说对javaweb的感想吧
  10. SGuard64.exe(SGuardwnd) ACE-Guard Client EXE:造成磁盘经常读写,游戏卡顿,及解决方案
  11. c# pdf转html,C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——基于Spire.Cloud.PDF
  12. trackmaker翻译_体育翻译滑雪中英对照翻译
  13. matlab中count()怎么用,count(1)这里面的1是什么意思
  14. advised by   org.springframework.transaction.interceptor.TransactionInterceptor.invoke.........
  15. 分享塑胶模具设计思路与流程,建议收藏!
  16. java excel 判断组重复_Java判断Excel某列是否有重复值
  17. 联想拯救者Y7000P鼠标卡顿问题(已解决)
  18. 股票K线统计,各个分钟线,日线,周线统计,sql示例
  19. 华为C8815 ROOT 成功
  20. FlinkSQL to Kafka连接器报错:could not find any factory for identifier ‘kafka‘ that implements

热门文章

  1. Python学习笔记:面向对象编程(4)
  2. Python:基础操作(2)
  3. MPI学习存在的一些问题
  4. python中%符号详解
  5. matlab生成图像路径列表和标签,打乱顺序
  6. USTC English Club Note20171016(2)
  7. 【学术软件】ETPS(English Text Processing Software)
  8. 台湾大学林轩田机器学习基石课程学习笔记2 -- Learning to Answer Yes/No
  9. Go协程池设计思路(Task-Job-Worker)
  10. PIC单片机入门_8位AD转换器