[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=2298

[算法]

考虑用总人数 - 最多人说真话

显然 , 对于每个人 , 如果他说的是真话 , 那么他的排名必然在[ai + 1 , n - bi]中 , 否则不合法

统计出每个合法区间相同的个数

那么问题转化为了 :

现在有一些线段 , 每条线段[li , ri]有一个权值wi , 从中选取若干条使得权值和最大

考虑dp

将区间按右端点排序 , 用fi表示前i个区间的最大权值和 , 通过二分求出最大的pos使得rpos < li

有转移方程fi = max{fi-1 , fpos + w}

答案即为n - fn

时间复杂度 : O(NlogN)

[代码]

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define N 100010
  4. typedef long long ll;
  5. typedef long double ld;
  6. typedef unsigned long long ull;
  7.  
  8. struct segment
  9. {
  10. int l , r;
  11. } s[N];
  12. struct info
  13. {
  14. int l , r;
  15. int value;
  16. } e[N];
  17.  
  18. int n , m , tot;
  19. int a[N] , b[N] , dp[N];
  20.  
  21. template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
  22. template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
  23. template <typename T> inline void read(T &x)
  24. {
  25. T f = ; x = ;
  26. char c = getchar();
  27. for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
  28. for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
  29. x *= f;
  30. }
  31. inline bool cmpa(segment a , segment b)
  32. {
  33. if (a.l != b.l) return a.l < b.l;
  34. else return a.r < b.r;
  35. }
  36. inline bool cmpb(info a , info b)
  37. {
  38. return a.r < b.r;
  39. }
  40.  
  41. int main()
  42. {
  43.  
  44. read(n);
  45. for (int i = ; i <= n; ++i)
  46. {
  47. read(a[i]);
  48. read(b[i]);
  49. if (a[i] + <= n - b[i])
  50. s[++tot] = (segment){a[i] + , n - b[i]};
  51. }
  52. sort(s + , s + tot + , cmpa);
  53. for (int i = ; i <= tot; ++i)
  54. {
  55. if (s[i].l == s[i - ].l && s[i].r == s[i - ].r)
  56. {
  57. if (e[m].value != s[i].r - s[i].l + )
  58. ++e[m].value;
  59. continue;
  60. } else
  61. e[++m] = (info){s[i].l , s[i].r , };
  62. }
  63. sort(e + , e + m + , cmpb);
  64. for (int i = ; i <= m; ++i)
  65. {
  66. int l = , r = i , k = ;
  67. while (l <= r)
  68. {
  69. int mid = (l + r) >> ;
  70. if (e[mid].r < e[i].l)
  71. {
  72. k = mid;
  73. l = mid + ;
  74. } else r = mid - ;
  75. }
  76. dp[i] = max(dp[i - ] , dp[k] + e[i].value);
  77. }
  78. printf("%d\n" , n - dp[m]);
  79.  
  80. return ;
  81.  
  82. }

[HAOI 2011] Problem A的更多相关文章

  1. [BZOJ 2301] [HAOI 2011] Problem b (莫比乌斯反演)(有证明)

    [BZOJ 2301] [HAOI 2011] Problem b (莫比乌斯反演)(有证明) 题面 T组询问,每次给出a,b,c,d,k,求\(\sum _{i=a}^b\sum _{j=c}^d[ ...

  2. [HAOI 2011]Problem b

    Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...

  3. [HAOI 2011]Problem c

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

  4. [BZOJ 2299][HAOI 2011]向量 题解(裴蜀定理)

    [BZOJ 2299][HAOI 2011]向量 Description 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), ...

  5. 【BZOJ 2301】【HAOI 2011】Problem b

    今天才知道莫比乌斯反演还可以这样:$$F(n)=\sum_{n|d}f(d) \Rightarrow f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)$$我好弱,,,对于$$F( ...

  6. 数学(莫比乌斯反演):HAOI 2011 问题B

    题目描述: 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入格式: 第一行一个整数n,接下来n ...

  7. [HAOI 2011]向量

    Description 题库链接 给你一对数 \(a,b\) ,你可以任意使用 \((a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b ...

  8. HDU 2011 多项式求和

    http://acm.hdu.edu.cn/showproblem.php?pid=2011 Problem Description 多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/ ...

  9. Warsaw U Contest Petrozavo dsk Summer 2011 Training Camp, Monday, September 5, 2011

    Warsaw U Contest Petrozavo dsk Summer 2011 Training Camp, Monday, September 5, 2011 Problem A.Chocol ...

随机推荐

  1. centos-64整合nginx和tomcat

    centos-64整合nginx和tomcat 分类: Linux 2013-04-25 10:41 128人阅读 评论(0) 收藏 举报 1.安装wget和依赖包 yum install wget ...

  2. HTML5 手机网页制作笔记

    http://top.css88.com/archives/546 http://www.w3cfuns.com/blog-5470280-5406828.html 最近在卓手机网页,第一次入手.把要 ...

  3. mac环境下清理系统垃圾clearMyMac 3.9 破解版

    mac环境下清理系统垃圾clearMyMac 3 轻轻松松清理好几十G的垃圾文件 下载地址 链接: https://pan.baidu.com/s/1XZbZwzhgQCnzpvQDvyQrRA 密码 ...

  4. nyist oj 37 回文字符串 (动态规划经典)

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 所谓回文字符串,就是一个字符串.从左到右读和从右到左读是全然一样的.比方"aba".当 ...

  5. HDFS源码分析EditLog之获取编辑日志输入流

    在<HDFS源码分析之EditLogTailer>一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的 ...

  6. 【WPF学习笔记】之如何通过后台C#代码添加(增/删/改按钮)实现对SQLServer数据库数据的更改

    首先,需要连接SQLServer数据库的服务器名称server.数据库名database.数据库用户名uid以及密码pwd,如下图: 然后需要以下数据库SQL代码段,还有一个myHelper.cs代码 ...

  7. win732 安装hadoop

    windows下安装hadoop http://www.cnblogs.com/coder2012/archive/2013/05/25/3096631.html硬盘格式应为NTFS1 下载安装 Cy ...

  8. 【BZOJ4653】[Noi2016]区间 双指针法+线段树

    [BZOJ4653][Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含 ...

  9. 原型模式 private static Map<String,Prototype> map = new HashMap<String,Prototype>();

    public class PrototypeManager { /** * 用来记录原型的编号和原型实例的对应关系 */ private static Map<String,Prototype& ...

  10. Spring Boot启动原理解析

    Spring Boot启动原理解析http://www.cnblogs.com/moonandstar08/p/6550758.html 前言 前面几章我们见识了SpringBoot为我们做的自动配置 ...