嘟嘟嘟

这题就比较有意思了,十分锻炼思维。

首先得学会转化,对于题中“有\(a_i\)个人比我高,\(b_i\)个人比我低”,相当于排在第\(a_i + 1\)到\(n - b_i\)位的人和我分数相同。
因此我们就把每一个人说的话变成了一段区间,那么说真话的人肯定是所有不相交的区间。乍一看就变成了区间覆盖,水贪心。

结果交上去WA的很惨。
因为这又和线段覆盖不太一样:对于两个完全重合的区间\([L, R]\),这两个区间是都可以选的,表示这两位分数相同。因此如果有一些相同的区间,我们最多可以选\(R - L + 1\)个。
所以我们要对上述区间进行去重,并给新的区间一个值\(val\),表示和他重复的区间有多少个。

那么现在就不能贪心了,变成了简单的dp。
先按\(R\)排序,令\(dp[i]\)表示到第\(i\)个区间的答案。因为区间不能相交,所以\(dp[i] = max \{dp[i - 1], dp[pos] + val[i] \}\),其中\(pos\)满足\(R[pos] < L[i]\)且\(R[pos]\)最大。
二分\(pos\),复杂度就是\(O(nlogn)\)。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define In inline
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 1e5 + 5;
inline ll read()
{ll ans = 0;char ch = getchar(), last = ' ';while(!isdigit(ch)) last = ch, ch = getchar();while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();if(last == '-') ans = -ans;return ans;
}
inline void write(ll x)
{if(x < 0) x = -x, putchar('-');if(x >= 10) write(x / 10);putchar(x % 10 + '0');
}int n, cnt1 = 0, cnt2 = 0;
struct Node
{int L, R, val;
}t[maxn], q[maxn];
In bool cmp1(Node a, Node b)
{return a.L == b.L ? a.R < b.R : a.L < b.L;
}
In bool cmp2(Node a, Node b)
{return a.R == b.R ? a.L < b.L : a.R < b.R;
}int dp[maxn];
In int find(int pos)
{int L = 0, R = pos - 1;while(L < R){int mid = (L + R + 1) >> 1;if(q[mid].R < q[pos].L) L = mid;else R = mid - 1;}return L;
}int main()
{n = read();for(int i = 1; i <= n; ++i){int a = read(), b = read();if(a + b < n) t[++cnt1] = (Node){a + 1, n - b, 1};}sort(t + 1, t + cnt1 + 1, cmp1);for(int i = 1; i <= cnt1; ++i)if(i == 1 || t[i].L != q[cnt2].L || t[i].R != q[cnt2].R) q[++cnt2] = t[i];else if(q[cnt2].val < q[cnt2].R - q[cnt2].L + 1) ++q[cnt2].val;sort(q + 1, q + cnt2 + 1, cmp2);for(int i = 1; i <= cnt2; ++i)dp[i] = max(dp[i - 1], dp[find(i)] + q[i].val);write(n - dp[cnt2]), enter;return 0;
}

转载于:https://www.cnblogs.com/mrclr/p/10483607.html

[HAOI2011]problem a相关推荐

  1. [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演

    1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...

  2. BZOJ2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 6435  Solved: 2986 [Submi ...

  3. [HAOI2011]Problem c

    链接 P2523 [HAOI2011]Problem c 想法还是很巧妙的. 其实只是问一个先后顺序,因为编号相同的话,那么\(id\)小的就在前面,\(id\)大的就在后面. 所以我们考虑的是到底有 ...

  4. BZOJ 2301 [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...

  5. BZOJ 2301: [HAOI2011]Problem b

    二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...

  6. 【BZOJ 2298】 2298: [HAOI2011]problem a (DP)

    2298: [HAOI2011]problem a Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1326  Solved: 637 Descrip ...

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

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

  8. P2522 [HAOI2011]Problem b

    P2522 [HAOI2011]Problem b 题意: 对于给出的 n 个询问,每次求有多少个数对 (x,y),满足 a≤x≤b,c≤y≤d,且 gcd(x,y)=k,gcd(x,y) 函数为 x ...

  9. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 4032  Solved: 1817 [Submi ...

  10. bzoj 2302: [HAOI2011]Problem c(DP)

    2302: [HAOI2011]Problem c Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 937  Solved: 509 [Submit] ...

最新文章

  1. mac for docker访问宿主机服务
  2. boost::hana::zip_with用法的测试程序
  3. 2.2.python正则表达式
  4. 开发基础(字符编码、列表操作)
  5. 特征工程到底是什么?2019百度实习生招聘试题之一
  6. Python3 捕捉异常
  7. 阿里巴巴数据中台实践分享
  8. signal、kill、fork
  9. java中输出红字_使用JDIC实现Java界面嵌入Web浏览器 出红字
  10. 机器人周志_机器人制造基础学习日志
  11. java服务器向客户端发消息_socket 服务器向指定的客户端发消息
  12. 4种Dolby声场技术的区别
  13. PAT题集2019.6.22排名变动
  14. Ambari 安装多个impala deamon节点(apache impala)
  15. 输入一个字符串,判断它的所有字符中否全部是大写字母,如不是,统计小写字母个数,并将其转换成大写字母后输出
  16. Guzzle中的异步请求
  17. HTML中的meta标签
  18. deepin 服务器_深度官方并没有提供Deepin服务器版下载,也没有开发计划
  19. 计算机一级ppt演示文稿第5套,PPT | 操作题第 13 套
  20. U盘文件丢失了怎么办?一串英文字符即可快速帮你找回,秒学!

热门文章

  1. Bootstrap Table插件 页面跳转后再回来保存搜索的值
  2. LightOJ - 1282 Leading and Trailing
  3. BZOJ1061: [Noi2008]志愿者招募(线性规划)
  4. 帮助打造无障碍APP Google将自动化测试GTXiLib
  5. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
  6. 状态压缩动态规划 -- 旅行商问题
  7. 专家教你如何设置无线路由器 享受无线乐趣
  8. .NET : 自定义TraceListener
  9. Mac Safari浏览器的阅读列表与iPhone、iPad (iOS)不同步的问题
  10. 蓝桥杯 ADV-179 算法提高 解二元一次方程组