题目传送门:
Problem - 1610C - Codeforces

设  中的  表示你所选出的数列的已知最大长度限制,而且是只管右限制的最大长度限制。

比如说第一个数右限制是 4,那么最大长度限制是 5,因为要算上它本身和它右边最多可能的人的个数。

然后如果第二个数是 9,那么最大限制依然是 5。

如果第二个数是 1,那么最大长度限制缩小为 3,因为要算上这两个和它右边最多可能多出来的 1 个人。

 表示在上述条件下的最大答案。

这样子我们从左往右扫一遍,每次去更新答案,可以发现每次更新的一定是一个区间。以下是原因:

  •  是单调递减的。
  •  是单调递增的。
  • 当  第 i 个人的右限制 时,这个人的右限制满足加入  的条件。
  • 第 i 个人的左限制 时,这个人的左限制满足加入  的条件。

因此只需要二分求出每次刚好满足右限制和左限制的位置,卡出来的是一个区间。 用树状数组维护。

#include <cstdio>
#include <cstring>
#include <iostream>
#define lowbit(i) (i&-i)
using namespace std;
const int N = 2e5 + 1;int t, n, a, b, tree[N ], ans, l,  r。void add(int i, int x){i = n - i;while(i <= n){tree[i] += x;i += lowbit(i);}
}int query(int i){i = n - i;int ret = 0;while(i > 0){ret += tree[i];i -= lowbit(i);}return ret;
}int main(){scanf("%d", &t);while(t--){ans = 0;memset(tree + 1, 0, sizeof(int) * n);scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%d%d", &a, &b);int ans1, ans2;l = 0, r = n - 1;while(l < r){ans1 = (l + r + 1) >> 1;if(ans1 - query(ans1) <= a) l = ans1;else r = ans1 - 1;}ans1 = l;l = 0, r = n;while(l < r){ans2 = (l + r) >> 1;if(query(ans2) <= b) r = ans2;else l = ans2 + 1;}ans2 = l;if(ans2 <= ans1){add(ans1, 1);add(ans2 - 1, -1);}}for(int i = 0; i < n; i++)ans = max(ans, min(i + 1, query(i)));printf("%d\n", ans);}return 0;
}

1610C - Keshi Is Throwing a Party 题解相关推荐

  1. Codeforces 1610C Keshi Is Throwing a Party

    题意 Keshi有 nnn 个朋友,第 iii 个朋友有 iii 美元.如果邀请第 iii 个朋友做客,必须满足宴会上最多有 aia_iai​ 个人比他富有,最多 bib_ibi​ 个人比他贫穷. 问 ...

  2. Codeforces-1610 C: Keshi Is Throwing a Party

    Codeforces-1610 C: Keshi Is Throwing a Party 题目传送门:Codeforces-1610 C 题目 题目截图 样例描述 题目大意   Keshi 正在举行一 ...

  3. Codeforces 1612C. Keshi Is Throwing a Party

    Codeforces 1612C. Keshi Is Throwing a Party 思路 首先容易发现,选择的人数具有单调性,是可以二分的 假设最后答案选了 xxx 个人,那么对于一个人有影响的, ...

  4. Keshi Is Throwing a Party

    题意 对于第i个人的权值为i,一个人能被加入序列当且仅当,数列中大于i的数至多不超过ai,小于i的数至多不超过bi,问最多能选多少人 题解 很明显的二分答案,那么需要考虑的就是怎么写check了.直接 ...

  5. C. Keshi Is Throwing a Party(二分答案),最/佳牛围栏,average。

    题目链接 题意: 一共n个人,第 i 个人的财富度为 i,每个人有两个属性 ai 和 bi,分别表示最多能够容忍的比自己富和比自己穷的人数. 问,最多能够选多少人,使得所有人的要求都可以满足. 思路: ...

  6. 【二分】C. Keshi Is Throwing a Party

    题目链接: https://codeforces.com/problemset/problem/1610/C n个盆友,第i个盆友有i块钱,小明想尽可能邀请更多的人.第i个人高兴有个条件,比他钱多的不 ...

  7. UVa 1586 Molar mass 分子量 题解

    英文 Description An organic compound is any member of a large class of chemical compounds whose molecu ...

  8. TYUT-A2专题题解

    TYUT-A2专题题解 循序渐进,基础练起. 01递推与组合 HDU1210 Eddy's 洗牌问题[递推函数+模拟] - 海岛Blog - CSDN博客 HDU2044 一只小蜜蜂...[递推] - ...

  9. TYUT-A专题题解(一)

    TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...

最新文章

  1. java中需要用equals来判断两个字符串值是否相等
  2. 标准库函数、系统调用的区别
  3. 物理化学 焓变的计算和相变焓
  4. 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
  5. python做excel表格柱状图_Python Excel 绘制柱形图
  6. Linux下搭建 kafka集群 + zookeeper集群部署 安装、启动、停止
  7. jeecg 输入框属性 自定义ajax 验证字段值是否存在
  8. STM32----摸石头过河系列(三)
  9. 计算机专业笔记本需要小键盘吗,笔记本电脑小键盘数字0不能用
  10. bzoj 1413: [ZJOI2009]取石子游戏(博弈+DP)
  11. FAQ系列 | 用MySQL实现发号器
  12. 火力全开,同时分解(切脸)多个视频
  13. Android手机投屏利器scrcpy
  14. 汇编语言实验八核心考点
  15. 5、Dubbo-监控中心
  16. 22届春季校招实习试水之路2(前端)
  17. APP界面设计指南|APP界面设计师必备信息图
  18. 光晕ce服务器位置,光晕ce地图
  19. 北方民族大学计算机考研科目,北方民族大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  20. 我的世界java版怎么弄在线时间_我的世界怎么设置游戏内的时间为夜晚

热门文章

  1. python 字符串输出时 使用空格隔开
  2. python算法动画_这可能是史上最全的Python算法集!
  3. 魅蓝note2解锁bootloader教程
  4. python程序控制结构实验报告_20193227 实验二《Python程序设计》实验报告
  5. Docker容器 Dead 状态分析
  6. 高分一号数据的预处理
  7. 电脑外设(I/O)简介:显示器
  8. 周期训练理论与方法pdf_周期_PDF图书下载_(美) 图德·邦帕 (Tudor O.Bompa) (美)_免费PDF电子书下载_第一图书网...
  9. Android 手机获取加速度传感器加速度数据并自定义采样频率
  10. 【完美解决】爬虫伪装代理IP方案