题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

3
2 0
0 2
2 2
输出 #1复制

1

说明/提示

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

思路:

转变题意:题目中的 ai bi 表示从1+ai 到 n-bi排名区间内的同学的分数相同,且与不属于该区间的同学分数一定不同。

考虑补集思想:最少说假话人数=总人数-最多说真话人数

而又显然:如果两个区间相交但不重合,则发生冲突。

比如一个人说第三名和第四名的成绩相同,另一个说第四名和第五名成绩相同,则必然有一个人说了假话

考虑给区间赋上权值:一个区间的权值=本质相同的区间总数,且最大为区间长度。

比如有五个人都说自己的排名是第三到第五名,则至多三个同学说真话。

于是题目就变成了一个区间覆盖问题qvq 求权值最大且互不相交的区间覆盖

DP即可。注意和【今年暑假不AC】不同,由于区间带权,不能直接贪心(爆零警告)

先以右端点为第一关键字,左端点为第二关键字排序。

定义DP [ i ] 表示右端点覆盖到 i 的合法方式最大权值。

dp[ r [ i ] ] = max (dp [ l [ i ] ] + w[ i ],dp [ r [ i ] ] ) ;

dp[ i ] = max ( dp [ i - 1 ] , dp [ i ] ) ;

值得一提的是第二个转移必须要在 i 之前的①转移都已完成(也即i<=当前右端点)。注意转移顺序,具体见代码(貌似又写丑了orz)

时间复杂度O(nlogn)

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std; const int maxn=; int dp[maxn];
struct node{
int l,r,w;
}a[maxn]; inline bool cmp(node a,node b) {
if (a.r==b.r) return a.l<b.l;
return a.r<b.r;
} inline void init(int n) {
int cnt_l=,cnt_r=,cnt_val=;
for (int i=;i<=n;i++) {
int now_l=a[i].l,now_r=a[i].r;
if (now_l!=cnt_l || now_r!=cnt_r) {
cnt_val=;
cnt_l=now_l,cnt_r=now_r;
}
cnt_val++;
a[i].w=min(cnt_val,now_r-now_l+);
}
} int main() {
int n;
scanf("%d",&n);
for (int i=;i<=n;i++) {
int x,y;
scanf("%d%d",&x,&y);
a[i].l=x+,a[i].r=n-y;
}
sort(a+,a+n+,cmp);
init(n);
int cnt=;
for (int i=;i<=n;i++) {
if (a[i].r<a[i].l) continue;
if (a[i].r>cnt) {
for (int j=cnt+;j<=a[i].r;j++) dp[j]=max(dp[j],dp[j-]);
cnt=a[i].r;
}
int l=a[i].l,r=a[i].r;
dp[r]=max(dp[r],dp[l-]+a[i].w);
}
if (n>cnt) for (int i=cnt+;i<=n;i++) dp[i]=max(dp[i],dp[i-]);
cout << n-dp[n];
}

清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A的更多相关文章

  1. 清北学堂例题 LUOGU2523【HAOI2011】problem c

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

  2. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  3. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  4. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  5. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  6. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  7. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)

    P4746 C’s problem(c)   时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...

  8. 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)

    P4746 C's problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差 ...

  9. 清北学堂入学测试P4751 H’s problem(h)

    P4751 H’s problem(h)  时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 小H是一个喜欢逛街的女孩子,但是由于上了大学 ...

随机推荐

  1. Java 笔试题

    有一些还是存在问题,欢迎大家一起探讨. 在Java类中,使用以下( )声明语句来定义公有的int型常量MAX. A. public int MAX = 100; B. final int MAX = ...

  2. select模块

    select模块 1.      select模块 源:select.py This module provides access to the select() and poll() functio ...

  3. Primecoin服务端更新--操作流程

    Primecoin服务端更新流程:  一.下载更新文件primecoin_x.y.z_xx.zip到/servers目录下:这里是把:版本primecoin0161alpha1更新到:版本primec ...

  4. Java基础 -1.3

    CLASSPATH 为了 可以在不同的目录中都可以执行d:\java\Hello.class文件 只能够依靠CLASSPATH环境变量 在cmd中 SET CLASSPATH = d:\java 当设 ...

  5. 820复试算法 快排找第 k 小

    done {20-01-30 12:56} ref: https://blog.csdn.net/fengsigaoju/article/details/50728588 note: void qui ...

  6. 7(计算机网络) ICMP与ping

    无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题.那台机器明明就在那里,你甚至都可以通过机器的终端连上去看.它看着好好的,可是就是连不上去,究竟是哪里出了问题呢? ICM ...

  7. CSS - 滑动门技术

    1. 概念: 1.1 为了使各种特殊形状的背景能够自适应元素中文本内容的多少,出现了CSS滑动门技术. 1.2 使各种特殊形状的背景能够自由拉伸滑动,以适应元素内部的文本内容,可用性更强. 1.3 最 ...

  8. Java单例模式:为什么我强烈推荐你用枚举来实现单例模式

    单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的设计模式之一.在运行期间,保证某个类只创建一个实例,保证一个类仅有一个实例,并提供一个访问它的全局访问点.下面就来讲讲Java中的N种 ...

  9. OPCDA通信--工作在透明模式下的CISCO ASA 5506-X防火墙配置

    尊重原创,转发请声名 inside OPCSERVER 一台 outside OPCCLIENT 一台 route模式 配置没成功,放弃,采用透明模式 !----进入全局配置-- configure ...

  10. Python用户界面编程PyQt5的四种的布局方式

    1.QT是C++编写的跨平台GUI库,GUI是指桌面程序应用. 2.开发基于pyqt5的桌面应用程序必须要使用两个类Qapplication和Qwidget类,都在PyQt5.Qt.widgets里面 ...