BZOJ2298 [HAOI2011]problem a
先把所有人从小到大排序,则
如果一个人说a个人比他大,b个人比他小,等价于他声称[b + 1, n - a]的值是相等的
问题转化为给一些线段,找出一些不重叠的线段,价值最大 (注意:线段可以重合!!!)
然后就是一遍扫过去的DP
f[i]表示以线段i为结尾的满足条件的线段最多数
f[i] = max(f[j]) + cnt[i], 其中r[j] < l[i], cnt[i]表示i这条线段重合次数
DP要优化的说,不过只要二分一下嘛就好了!
1 /************************************************************** 2 Problem: 2298 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:792 ms 7 Memory:5012 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <algorithm> 12 #include <utility> 13 #include <map> 14 15 using namespace std; 16 typedef pair<int, int> P; 17 const int N = 100005; 18 struct data{ 19 int x, y, cnt; 20 bool f; 21 }a[N]; 22 inline bool operator < (const data a, const data b){ 23 return a.y == b.y ? a.x < b.x : a.y < b.y; 24 } 25 map <P, int> M; 26 int n, f[N], X, Y, l; 27 28 inline int read(){ 29 int x = 0, sgn = 1; 30 char ch = getchar(); 31 while (ch < '0' || ch > '9'){ 32 if (ch == '-') sgn = -1; 33 ch = getchar(); 34 } 35 while (ch >= '0' && ch <= '9'){ 36 x = x * 10 + ch - '0'; 37 ch = getchar(); 38 } 39 return sgn * x; 40 } 41 42 int main(){ 43 n = read(); 44 for (int i = 1; i <= n; ++i){ 45 X = read(), Y = read(); 46 a[i].f = (X + Y >= n); 47 a[i].x = n - X, a[i].y = ++Y; 48 if (a[i].x > a[i].y) swap(a[i].x, a[i].y); 49 a[i].cnt = min(M[make_pair(a[i].x, a[i].y)] += a[i].f ^ 1, a[i].y - a[i].x + 1); 50 } 51 sort(a + 1, a + n + 1); 52 for (int i = 1; i <= n; ++i){ 53 if (a[i].f){ 54 f[i] = f[i - 1]; 55 continue; 56 } 57 l = lower_bound(a + 1, a + i, (data){-1, a[i].x}) - a - 1; 58 f[i] = max(f[i - 1], f[l] + a[i].cnt); 59 } 60 printf("%d\n", n - f[n]); 61 return 0; 62 }
View Code
转载于:https://www.cnblogs.com/rausen/p/4345380.html
BZOJ2298 [HAOI2011]problem a相关推荐
- [LG P2519][BZOJ2298][HAOI2011]problem a
[LG P2519][BZOJ2298][HAOI2011]problem a 题目描述 一次考试共有n个人参加 第i个人说:"有ai个人分数比我高,bi个人分数比我低." 问最少 ...
- BZOJ2298 [HAOI2011]problem a 【dp】
题目 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个 ...
- BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1747 Solved: 876 [Submit][Status][Discuss] Descrip ...
- [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演
1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...
- BZOJ2301: [HAOI2011]Problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 6435 Solved: 2986 [Submi ...
- [HAOI2011]Problem c
链接 P2523 [HAOI2011]Problem c 想法还是很巧妙的. 其实只是问一个先后顺序,因为编号相同的话,那么\(id\)小的就在前面,\(id\)大的就在后面. 所以我们考虑的是到底有 ...
- 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)函 ...
- BZOJ 2301: [HAOI2011]Problem b
二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...
- 【BZOJ 2298】 2298: [HAOI2011]problem a (DP)
2298: [HAOI2011]problem a Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1326 Solved: 637 Descrip ...
最新文章
- [BZOJ1857][Scoi2010]传送带
- STL中的双向队列deque
- 中国安防为何世界最强?中科院AI+安防报告,解密8大趋势和8大限制【附下载】| 智东西内参...
- java 字符串原子变量,如何在java中提供原子读/写2个变量?
- Stanford CS107 Programming Paradigms 编程范式
- layui网页html编辑器,layui使用富文本编辑器
- android 减速动画,Android View Animation
- python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现
- 区块链教程(三):Solidity编程基础
- SQL Server数据库镜像的FailOver自动连接
- Ruby之散列与快排小程序
- mysql索引机制_mysql索引原理详解
- 揭秘微信朋友圈这种信息推流背后的系统设计
- Nginx location
- 笔记_python库jpype安装和使用,及如何打包java程序供Python调用
- Squid缓存代理服务器
- CentOS7 ifup 和 ifdown
- bigbrother的python第一天 复习基础知识
- 刚子扯谈:专注 极致 口碑 快
- javascript之活灵活现的Array
热门文章
- [快速数论变换 NTT]
- JSBinding+SharpKit / 菜单介绍
- JPA学习---第五节:日期和枚举等字段类型的JPA映射
- SQL--数据库性能优化详解
- 使用Sencha Designer来快速开发web用户界面 -- 初识Designer
- 仿苹果的导航,有点凹陷的感觉
- ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
- 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析
- 《HeadFirst设计模式》笔记
- 求数的绝对值一定是正数_人教版七年级数学上册1.2.4绝对值同步练习