题目

一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)

输入格式

第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai、bi

输出格式

一个整数,表示最少有几个人说谎

输入样例

3

2 0

0 2

2 2

输出样例

1

提示

100%的数据满足: 1≤n≤100000 0≤ai、bi≤n

题解

一个人的话意思就是自己的分数排名在区间\([a_i + 1,n - b_i]\)之间,且这个区间内的分数都相等
那么我们现在有\(n\)个这样的区间
先去掉那些\(l > r\)的区间
由于相等的区间具有相同的真假性,我们可以合并
相交的区间不能共存,问题就转化为了选若干个带权区间不相交的最大值

按\(r\)排序,设\(f[i]\)为第\(i\)个区间为止的最大答案
我们只需找到最大的\(j<i\)使得\(r_j <l_i\),那么
\[f[i] = max(f[i - 1],f[j] + v_i)\]
可以二分查找

\(n - f[m]\)就是答案

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
struct inter{int l,r,v;
}e[maxn];
inline bool operator <(const inter& a,const inter& b){return a.l == b.l ? a.r < b.r : a.l < b.l;
}
inline bool cmp(const inter& a,const inter& b){return a.r == b.r ? a.l < b.l : a.r < b.r;
}
int n,tot,f[maxn];
int find(int l,int r,int x){int mid;while (l < r){mid = l + r + 1 >> 1;if (e[mid].r < x) l = mid;else r = mid - 1;}return l;
}
int main(){int tn;tn = n = read();REP(i,n){e[i].l = read() + 1;e[i].r = n - read();e[i].v = 1;}tot = 0;for (int i = 1; i <= n; i++)if (e[i].l <= e[i].r) e[++tot] = e[i];n = tot;sort(e + 1,e + 1 + n);tot = 1;for (int i = 2; i <= n; i++)if (e[i].l == e[tot].l && e[i].r == e[tot].r)e[tot].v++;else e[++tot] = e[i];REP(i,tot) e[i].v = min(e[i].v,e[i].r - e[i].l + 1);sort(e + 1,e + 1 + tot,cmp);f[1] = e[1].v;for (int i = 2; i <= tot; i++){int pre = find(0,i - 1,e[i].l);f[i] = max(f[i - 1],f[pre] + e[i].v);}printf("%d\n",tn - f[tot]);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8882068.html

BZOJ2298 [HAOI2011]problem a 【dp】相关推荐

  1. BZOJ2302 [HAOI2011]Problem c 【dp】

    题目 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,a ...

  2. P2519-[HAOI2011]problem a【dp】

    正题 题目链接:https://www.luogu.org/problem/P2519 题目大意 nnn个人,第iii个人说aia_iai​个人比他高,bib_ibi​个人比他低,允许有相同分数,求最 ...

  3. [LG P2519][BZOJ2298][HAOI2011]problem a

    [LG P2519][BZOJ2298][HAOI2011]problem a 题目描述 一次考试共有n个人参加 第i个人说:"有ai个人分数比我高,bi个人分数比我低." 问最少 ...

  4. [uoj390][UNR #3]百鸽笼【dp】【容斥原理】

    [题目链接] http://uoj.ac/problem/390 [题解] 考虑容斥原理,计算第 i i i列的时候,可以强制一些列在它之后被选取完,其他的列就不用处理了. 那么直到i" r ...

  5. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  6. HPU 1002 A + B Problem II【大数】

    HPU 1002 A + B Problem II[大数] A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  7. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  8. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  9. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

最新文章

  1. 最新 crtmpserver 源码的获取方法
  2. html的选择器使用
  3. 吴裕雄 python 神经网络——TensorFlow 图、张量及会话
  4. android通知图标变白色,android 7.0通知图标出现白色方块
  5. mysql space id_MySQL8.0新特性:增加系统文件追踪space ID和物理文件的映射-阿里云开发者社区...
  6. android系统(3)---dumpsys 知识学习
  7. Android使用软引用和弱引用
  8. 定位叠放次序z-index(HTML、CSS)
  9. Leetcode 318答案详解(基于C++位操作)
  10. 明翰游戏学笔记V0.2(持续更新)
  11. 计算机类专业哪些专业比较好,计算机类专业有哪些 哪个专业比较好
  12. python如何编写温度转换_用python写温度转换
  13. 订单超时、定时任务解决方案和思路
  14. GateWay 网关服务
  15. 幸福人生在于正确选择
  16. 高通安卓关闭WiFi服务不卸载驱动
  17. selenium处理12306登录
  18. RAID磁盘阵列、mdadm、群晖软RAID
  19. matlab波门,一种距离波门拖引有源干扰的仿真设计方法与流程
  20. 计算机鼠标不会动,为什么鼠标突然不动了 有什么解决方法

热门文章

  1. textarea 固定大小,滚动条,限制拖动,文字对齐
  2. wpf silverlight开发框架(prism)系列教程
  3. MM的SQLDMO- -哈哈(数据备份与恢复篇)
  4. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...
  5. ibmmq 通道命令_IBM_MQ常用命令的.doc
  6. matlab 博客,matlab
  7. c语言提取颜色,C语言颜色转换宏
  8. java 自定义注解_两步实现Java自定义注解
  9. Mysql-学习笔记(==》常用函数 八)
  10. 2016年第31周四