Description

题库链接

初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双。已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的溜冰鞋。有 \(m\) 次操作,每次包含两个数 \(r_i\) , \(x_i\) 代表来了 \(x_i\) 个 \(r_i\) 号脚的人。 \(x_i\) 为负,则代表走了这么多人。 对于每次操作,输出溜冰鞋是否足够。

\(1\leq n\leq 200,000,1\leq m\leq 500,000\)

Solution

用 \(\text{Hall}\) 定理以及贪心的思想,容易得到 \(\forall l,r\in[1,n],l\leq r\)

\[\sum_{i=l}^rx_i\leq k(r+d-l+1)\]

移项,得到

\[\sum_{i=l}^r(x_i-k)\leq k\times d\]

显然只要有 \((x_i-k)\) 最大子段和 \(\leq k\times d\) 。线段树维护即可。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 200000+5; int n, m, k, d, x, r;
struct node {
ll mx, l, r, sum;
node (ll _mx = 0, ll _l = 0, ll _r = 0, ll _sum = 0) {
mx = _mx, l = _l, r = _r, sum = _sum;
}
node operator + (const node &b) const {
node ans;
ans.l = max(l, sum+b.l); ans.r = max(b.r, b.sum+r);
ans.sum = sum+b.sum; ans.mx = max(r+b.l, max(mx, b.mx));
return ans;
}
} ;
struct Segment_tree {
#define lr(o) (o<<1)
#define rr(o) (o<<1|1)
node key[N<<2];
void build(int o, int l, int r) {
if (l == r) {key[o] = node(-k, -k, -k, -k); return; }
int mid = (l+r)>>1;
build(lr(o), l, mid), build(rr(o), mid+1, r);
key[o] = key[lr(o)]+key[rr(o)];
}
void modify(int o, int l, int r, int loc, int val) {
if (l == r) {
ll t = key[o].sum+val;
key[o] = node(t, t, t, t);
return;
}
int mid = (l+r)>>1;
if (loc <= mid) modify(lr(o), l, mid, loc, val);
else modify(rr(o), mid+1, r, loc, val);
key[o] = key[lr(o)]+key[rr(o)];
}
} T; void work() {
scanf("%d%d%d%d", &n, &m, &k, &d);
T.build(1, 1, n);
while (m--) {
scanf("%d%d", &r, &x);
T.modify(1, 1, n, r, x);
puts(T.key[1].mx <= 1ll*k*d ? "TAK" : "NIE");
}
}
int main() {work(); return 0; }

[POI 2009]Lyz的更多相关文章

  1. 解题:POI 2009 Lyz

    题面 板板讲的霍尔定理 霍尔定理:一张二分图有完全匹配的充要条件是对于任$i$个左部点都有至少$i$个右部点与它们相邻.放在这个题里就是说显然最容易使得鞋不够的情况是一段连续的人,那就维护一下最大子段 ...

  2. 解题:POI 2009 Fire Extinguishers

    题面 洛谷数据非常水,建议去bzoj 我第一眼一看这不是那个POI2011的升级版吗(明明这个是2009年的,应该说那个是这个的弱化版,果然思想差不多. 因为$k$很小,可以考虑每个间隔距离来转移.我 ...

  3. 解题:POI 2009 Ticket Inspector

    题面 看起来很水,然而不会DP的蒟蒻并不会做,PoPoqqq orz 设$f[i][j]$表示当前在第$i$个点和第$i+1$个点之间查票,已经查了$j$次的最大收益.然后就是那种很常见的枚举前一个结 ...

  4. 解题:POI 2009 TAB

    题面 这也算是个套路题(算吗)?发现换来换去每行每列数的组成是不变的,那么就把每行每列拎出来哈希一下,复杂度$O(Tn^2log$ $n)$有点卡时=.=. 然而正解似乎不需要哈希,就像这样↓ ;i& ...

  5. 【BZOJ 1115】【POI 2009】石子游戏Kam

    http://www.lydsy.com/JudgeOnline/problem.php?id=1115 差分后变成阶梯博弈. #include<cstdio> #include<c ...

  6. 【Nim 游戏】 学习笔记

    前言 没脑子选手随便一道博弈论都不会 -- 正文 Nim 游戏引入 这里给出最简单的 \(Nim\) 游戏的题目描述: \(Nim\) 游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\ ...

  7. OAF_文件系列11_实现OAF读写Excel包JXL和POI的区别(概念)

    20150803 Created By BaoXinjian

  8. Java生成excel导出文件(使用poi+JXL)

    1.使用poi生成文件 package com.mi.entity; import java.util.Date; public class Student { private int id; pri ...

  9. Java POI 两种导出方式

    这里面包含了模板导出方法和自定义模板进行导出 package jp.co.syspro.poo.action.hibikoyou; import java.io.ByteArrayOutputStre ...

随机推荐

  1. Zookeeper Client基础操作和Java调用

    ## Zookeeper > Zookeeper目前用来做数据同步,再各个服务之前同步关键信息 i.客户端操作 1. 创建 create [-s] [-e] path data acl -s 为 ...

  2. CUDA[4] sample program: matrix-vector multiplication

    Use Compressed Sparse Row Format (CSR) to represent matrix #include "cuda_runtime.h" #incl ...

  3. zlib+pcre+openssl+nginx安装

    安装nginx之前首先有3个包先要安装,一个是zlib,一个是pcr3,还有一个openssl http://nginx.org/en/docs/configure.html,这个是Nginx的安装手 ...

  4. Paper | 块分割信息 + 压缩视频质量增强

    目录 1. 亮点 2. 网络 3. Mask 及其融合 4. 结论 论文:Enhancing HEVC Compressed Videos with a Partition-Masked Convol ...

  5. android 动画学习

    android动画基础简介及使用方法:http://www.cnblogs.com/ldq2016/p/5407061.html

  6. STM32F1xx寄存器版库

    文件下载链接 https://files.cnblogs.com/files/listenscience/STM32F1xx%28MDK5%292018.10.20.rar

  7. Number of subarrays having sum exactly equal to k(explanation for 437. Path Sum III of leetcode)

    https://www.geeksforgeeks.org/number-subarrays-sum-exactly-equal-k/ 讲解的详细 看这道题是为了解决https://leetcode. ...

  8. CNN 文本分类

    谈到文本分类,就不得不谈谈CNN(Convolutional Neural Networks).这个经典的结构在文本分类中取得了不俗的结果,而运用在这里的卷积可以分为1d .2d甚至是3d的.  下面 ...

  9. nlog 的手动配置

    使用nlog的时候,有时候需要手动配置.比如数据库链接和密码不配在文件里,或者统计配置在一个位置之类的. var config = new NLog.Config.LoggingConfigurati ...

  10. Android 框架式编程 —— 起篇

    一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...