题目描述

一次考试共有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. BZOJ 4167: 永远的竹笋采摘

    首先同BZOJ5052 \(O(n \log n \log v)\) 求出所有点对 现在变成选出 \(k\) 条不相交的线段使得权值最小 可用前缀min优化dp \(O(nk)\) 解决 还是太慢,考 ...

  2. day 10 作业

    # 2.写函数,接收n个数字,求这些参数数字的和. def sum_func(*args): total = 0 for i in args: total += i return total prin ...

  3. 【转】Python中*args和**kwargs的区别

    一.*args的使用方法 *args 用来将参数打包成tuple给函数体调用 例子一: 输出结果以元组的形式展示 def function(*args): print(args, type(args) ...

  4. 模拟服务容器Ioc

    服务容器是一个用于管理类依赖和执行依赖注入的强大工具. 一个类要被容器所能够提取,必须要先注册至这个容器.既然称这个容器叫做服务容器,那么我们需要某个服务,就得先注册.绑定这个服务到容器,那么提供服务 ...

  5. 《容器化.NET应用架构指南》脑图学习笔记(第一部分)

    一.关于这本官方“圣经” 作为.NET程序员,对于微软官方推动的架构示例总是特别关注,从PetShop到MusicStore再到eShopOnContainers,每一次关注,都会了解到业界最新的架构 ...

  6. 63 滑动窗口的最大值 &&front(),back()操作前一定要判断容器的尺寸不能为0

    给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6, ...

  7. Django 学习之中间件Middleware

    一.中间件介绍 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响 ...

  8. 认识iOS系统架构

    关于本文: 文章主要介绍iOS系统架构中的四层结构的内容.常用的框架.大致的功能,然后对iOS开发人员的发展提出自己的一些拙见. 一.iOS系统是基于UNIX系统,所有从系统稳定性上来说的确比其他操作 ...

  9. leetcode295 Find Median from Data Stream

    """ Median is the middle value in an ordered integer list. If the size of the list is ...

  10. zabbix通过ipmi传感器监控浪潮服务器的硬件信息

    一:实验对象 操作系统版本:centos7.6 监控对象:通过服务器传感器获取到的所有在使用的硬件信息 zabbix版本: 4.0.14二:zabbix介绍 zabbix适合中小型企业.大型企业的用户 ...