题意

题目链接

分析

  • 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理。
  • 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合。更进一步地,我们考虑的人一定是连续的。
  • 假设我们考虑的区间的总人数为 \(x\) ,区间长度为 \(len\), 那么 \(x-(len+d)*k>0\) 于是 \(x-k*len>dk\) ,维护连续最大和即可。
  • 总时间复杂度为 \(O(nlogn)\)。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. #define go(u) for(int i = head[u], v = e[i].to; i; i=e[i].lst, v=e[i].to)
  5. #define rep(i, a, b) for(int i = a; i <= b; ++i)
  6. #define pb push_back
  7. #define re(x) memset(x, 0, sizeof x)
  8. inline int gi() {
  9. int x = 0,f = 1;
  10. char ch = getchar();
  11. while(!isdigit(ch)) { if(ch == '-') f = -1; ch = getchar();}
  12. while(isdigit(ch)) { x = (x << 3) + (x << 1) + ch - 48; ch = getchar();}
  13. return x * f;
  14. }
  15. template <typename T> inline void Max(T &a, T b){if(a < b) a = b;}
  16. template <typename T> inline void Min(T &a, T b){if(a > b) a = b;}
  17. const int N = 2e5 + 7;
  18. int n, m, d;
  19. LL k;
  20. struct data {
  21. LL mx, l, r, s;
  22. data operator +(const data &rhs) const {
  23. data res;
  24. res.mx = max(max(mx, rhs.mx), r + rhs.l);
  25. res.s = s + rhs.s;
  26. res.l = max(l, s + rhs.l);
  27. res.r = max(rhs.r, rhs.s + r);
  28. return res;
  29. }
  30. }t[N << 2];
  31. #define Ls o << 1
  32. #define Rs o << 1 | 1
  33. void pushup(int o) {
  34. t[o] = t[Ls] + t[Rs];
  35. }
  36. void build(int l, int r, int o) {
  37. if(l == r) {
  38. t[o].mx = t[o].s = -k;
  39. return;
  40. }int mid = l + r >> 1;
  41. build(l, mid, Ls);
  42. build(mid + 1, r, Rs);
  43. pushup(o);
  44. }
  45. void modify(int p, int l, int r, int o, int v) {
  46. if(l == r) {
  47. t[o].mx += v, t[o].s += v;
  48. t[o].l = t[o].r = t[o].s;
  49. return;
  50. }int mid = l + r >> 1;
  51. if(p <= mid) modify(p, l, mid, Ls, v);
  52. else modify(p, mid + 1, r, Rs, v);
  53. pushup(o);
  54. }
  55. int main() {
  56. n = gi(), m = gi(), k = gi(), d = gi();
  57. build(1, n, 1);
  58. while(m--) {
  59. int r = gi(), x = gi();
  60. modify(r, 1, n, 1, x);
  61. puts(t[1].mx > 1ll * d * k ? "NIE": "TAK");
  62. }
  63. return 0;
  64. }

[BZOJ1135][POI2009]Lyz[霍尔定理+线段树]的更多相关文章

  1. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  2. [BZOJ3693]圆桌会议[霍尔定理+线段树]

    题意 题目链接 分析 又是一个二分图匹配的问题,考虑霍尔定理. 根据套路我们知道只需要检查 "区间的并是一段连续的区间" 这些子集. 首先将环倍长.考虑枚举答案的区间并的右端点 \ ...

  3. [BZOJ2138]stone[霍尔定理+线段树]

    题意 一共有 \(n\) 堆石子,每堆石子有一个数量 \(a\) ,你要进行 \(m\) 次操作,每次操作你可以在满足前 \(i-1\) 次操作的回答的基础上选择在 \([L_i,R_i]\) 区间中 ...

  4. 【AtCoder ARC076】F Exhausted? 霍尔定理+线段树

    题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max( ...

  5. BZOJ1135 LYZ(POI2009) Hall定理+线段树

    做这个题之前首先要了解判定二分图有没有完备匹配的Hall定理: 那么根据Hell定理,如果任何一个X子集都能连大于等于|S|的Y子集就可以获得完备匹配,那么就是: 题目变成只要不满足上面这个条件就能得 ...

  6. [arc076F]Exhausted?[霍尔定理+线段树]

    题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所 ...

  7. 【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)

    题面戳我 Solution 二分图是显然的,用二分图匹配显然在这个范围会炸的很惨,我们考虑用霍尔定理. 我们任意选取穿\(l,r\)的号码鞋子的人,那么这些人可以穿的鞋子的范围是\(l,r+d\),这 ...

  8. BZOJ1135:[POI2009]Lyz(线段树,Hall定理)

    Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人 ...

  9. LOJ.6062.[2017山东一轮集训]Pair(Hall定理 线段树)

    题目链接 首先Bi之间的大小关系没用,先对它排序,假设从小到大排 那么每个Ai所能匹配的Bi就是一个B[]的后缀 把一个B[]后缀的匹配看做一条边的覆盖,设Xi为Bi被覆盖的次数 容易想到 对于每个i ...

随机推荐

  1. 使用 Roslyn引擎动态编译代码

    Roslyn引擎自2014年开源至今这么久,一直没怎么了解过,虽然VS2015早就集成了它. 以前老一套的动态编译方法在 .NET Core中似乎不再支持了,很多方法都是未实现的.下面就介绍如何在.N ...

  2. Innodb页面存储结构-2

    上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...

  3. RBAC用户权限管理数据库设计【转载】

    本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...

  4. Linux中 /proc/[pid] 目录各文件简析

    Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系 ...

  5. [转]Java虚拟机是如何判断变量类型的

    [原文]https://www.toutiao.com/i6591766777745637891/ 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java ...

  6. pychram使用技巧

    1.代码添加断点 点击对应行代码,按ctrl+F8,即可添加断点 2.查看内置函数的源码 点击对应函数后按crtl+B

  7. 乘风破浪:LeetCode真题_036_Valid Sudoku

    乘风破浪:LeetCode真题_036_Valid Sudoku 一.前言 有的时候对于一些基础知识的掌握,对我们是至关重要的,比如ASCII重要字符的表示,比如一些基本类型的长度. 二.Valid ...

  8. SDN期末作业博客

    一.项目描述 A P4-based Network Load Balancing Application 基于P4的网络负载均衡项目 二.个人分工 The Controller : Acquire t ...

  9. String真的是不可变的吗?

    你可能问一个人String是可变的吗?想必他们都会一口同生的说String是不可变的,因为String是final修饰的,而且它底层的是final修饰的char[]数组. 可以看到String源码: ...

  10. sqlserver 镜像 断开连接 正在恢复+主机服务器关机用备用镜像

    如果主机坏了断开连接就用备机的镜像数据库 --主备互换,备机sql命令 USE master;   ALTER DATABASE test SET PARTNER FORCE_SERVICE_ALLO ...