【BZOJ2298】【luoguP2519】problem a
description
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低。”问最少有几个人没有说真话(可能有相同的分数)
analysis
这题转化模型很妙,容易知道最少没有说真话的数量\(=n-\)说真话最多的数量
对于\(a_i\)个比\(i\)大、\(b_i\)个比\(i\)小,可以看成\(i\)分数排名第\(a_i+1\)名
又由于有重分,那么转化成\([a_i+1,n-b_i]\)这段排名内的分数全部相等
判断某个区间单独不可行就判断\(a_i+1\)是否大于\(n-b_i\)
如果两个区间有交(且不完全重合),这肯定不合法,至少一个是假话
这是因为给出的分数区间唯一确定,不可能出现同分数不同区间
现在问题相当于有很多条线段,求\([1,n]\)区间内,最大线段个数覆盖是多少
先把线段按右端点排序,然后统计同一区间出现的次数,次数大于区间长度则取\(min\)
设\(f[i]\)表示到第\(1\)位到第\(i\)位最大线段覆盖,由于排序好了,维护一个左端点转移
若\(b[left].y==i\),则可以转移到\(f[i]\),\(++left\)继续转移即可
我调了很久因为\(n\)前后不一样,实际应该取最初读入的\(n\)来算答案
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 100005
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
ll f[MAXN],val[MAXN];
ll n,m,tot,cnt;
struct node
{
ll x,y;
}a[MAXN],b[MAXN];
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline bool cmp(node a,node b){return a.y<b.y || (a.y==b.y && a.x<b.x);}
int main()
{
//freopen("P2519.in","r",stdin);
n=m=read();
fo(i,1,n)
{
ll x=read(),y=read();
if (x+y>=n)continue;
a[++tot].x=x+1,a[tot].y=n-y;
}
n=tot,tot=0,sort(a+1,a+n+1,cmp);
fo(i,1,n)
{
if (i>1 && a[i].x==a[i-1].x && a[i].y==a[i-1].y){++val[tot];continue;}
b[++tot]=a[i],val[tot]=1;
}
fo(i,1,tot)val[i]=min(val[i],b[i].y-b[i].x+1);
ll left=0;memset(f,128,sizeof(f)),f[0]=0;
fo(i,1,m)
{
f[i]=f[i-1];
while (left<tot && b[left+1].y==i)++left,f[i]=max(f[i],f[b[left].x-1]+val[left]);
}
printf("%lld\n",m-f[m]);
return 0;
}
【BZOJ2298】【luoguP2519】problem a的更多相关文章
- 【BZOJ2298】[HAOI2011]problem a DP
[BZOJ2298][HAOI2011]problem a Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相 ...
- 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)
[BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...
- 【BZOJ3489】A simple rmq problem(KD-Tree)
[BZOJ3489]A simple rmq problem(KD-Tree) 题面 BZOJ 题解 直接做肯定不好做,首先我们知道我们是一个二维平面数点,但是限制区间只能出现一次很不好办,那么我们给 ...
- 【CF903G】Yet Another Maxflow Problem 线段树
[CF903G]Yet Another Maxflow Problem 题意:一张图分为两部分,左边有n个点A,右边有m个点B,所有Ai->Ai+1有边,所有Bi->Bi+1有边,某些Ai ...
- 【BZOJ3489】A simple rmq problem
[BZOJ3489]A simple rmq problem 题面 bzoj 题解 这个题不强制在线的话随便做啊... 考虑强制在线时怎么搞 预处理出一个位置上一个出现的相同数的位置\(pre\)与下 ...
- 【BZOJ3489】A simple rmq problem kd-tree
[BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...
- 【题解】CF986E Prince's Problem(树上差分+数论性质)
[题解]CF986E Prince's Problem(树上差分+数论性质) 题目大意: 给定你一棵树,有点权\(val_i\le 10^7\).现在有\(m\)组询问给定参数\(x,y,w\)问你对 ...
- 【题解】【A % B Problem(P1865)】-C++
题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...
- 【刷题记录】 && 【算法杂谈】折半枚举与upper_bound 和 lower_bound
[什么是upper_bound 和 lower_bound] 简单来说lower_bound就是你给他一个非递减数列[first,last)和x,它给你返回非递减序列[first, last)中的第一 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
随机推荐
- windows IIS FTP 不支持创建多级目录
昨天因为这个事情搞了好久,因为客户那边使用的是IIS 上的FTP ,想着都差不多试着运行,结果竟然报错,说"错误550 文件不可用" 是在GetResponse()出现的异常,我用 ...
- Tomcat Architect
Tomcat Architect Hierarchy of nested tag representing different components in server.xml. 1 <Serv ...
- Loop Sql
-- Numeric FOR loop -- set serveroutput on -->> do not use in TOAD -- DECLARE k ; BEGIN .. LOO ...
- vue之自定义指令
1.自定义指令的作用 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍 ...
- HIVE的安装步骤及遇到的问题及解决方法
一.root 用户 解压安装包 二 chown -R hadoop:hadoop apache-hive-1.2.2-bin/ chmod -R 755 apache-hive-1 ...
- 《DNS攻击防范科普系列2》 -DNS服务器怎么防DDoS攻击
在上个系列<你的DNS服务真的安全么?>里我们介绍了DNS服务器常见的攻击场景,看完后,你是否对ddos攻击忧心重重?本节我们来告诉你,怎么破局!! 首先回顾一下DDoS攻击的原理.DDo ...
- thinkphp 防止XSS(跨站脚本攻击)
XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...
- 主席树/线段树模拟归并排序+二分答案(好题)——hdu多校第4场08
用主席树写起来跑的快一点,而且也很傻比,二分答案,即二分那个半径就行 主席树求的是区间<=k的个数 #include<bits/stdc++.h> using namespace s ...
- 牛客多校第十场 F Popping Balloons 线段树维护稀疏矩阵
题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r. 题解: 横向记录每列有多少个气球,分别在哪行上. 然后把这个数据改造成 ...
- Python sorted list的实现
Python sorted list的实现 具体思路是用二分保list有序+插入 class SortedList(list): K = -1 def __init__(self, K=-1): li ...