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. Reading | 《机器学习》(周志华)(未完待续)

    目录 I. 大师对人工智能和机器学习的看法 II. Introduction A. What is Machine Learning 什么是机器学习 B. Basic terms 基础术语 C. In ...

  2. 向Word添加一段文本

    文档层次结构 [段落之后] 是一段连续文本,它定义具有一组常见属性的文本区域.一段连续文本由 r 元素表示,这样创建器便可组合换行.样式或格式设置属性,从而将相同信息应用于一段连续文本的所有部分. 正 ...

  3. 桌面管理工具 RedisDesktopManager 0.8.8

    RedisDesktopManager 0.8.8  发布,此版本更新内容如下: 改进: Show key bytes length and value bytes length #3677 修复: ...

  4. 《mysql必知必会》学习_第18章_20180807_欢

    第18章 全文本搜索 P121  #创建一个新表,对表的列进行定义,定义之后,MySQL自动维护该索引# create table productnotes ( note_id  int   NOT ...

  5. 团队博客-第六周:Alpha阶段项目复审(只会嘤嘤嘤队)

    小组名 题目 优点 缺点 排名 小谷围驻广东某工业719电竞大队 广工生活社区 功能多样,设计完整,实用,界面美观 界面风格不够统一,当前时间系统尚未发布 1 大猪蹄子队 四六级背单词游戏 界面十分美 ...

  6. iOS 系统通知

    iOS相当多一部分系统事件实际上都是通过通知来完成的,依赖于通知的广播形式,我们可以在AppDelegate中通过添加空通知来捕捉所有通知: static NSString *const MYNOTI ...

  7. js脚本实现自动上传至github

    概述 如果要进行多次上传,使用git gui也会不方便,所以我总结了一下用npm的simple-git实现自动上传至github的方法.供以后开发时参考,相信对其他人也有用. 前提条件 需要安装nod ...

  8. 写一个shell 快速启动停止你的微服务吧

    在这个微服务盛行的时代,docker获得了巨大的成功,因为我们需要在一台服务器装上N个服务. 本文不是想讨论如何使用docker,而是,在一台服务器安装了多个服务后,怎样启动方便的启动服务呢? 一.在 ...

  9. pdf.js显示合同签名问题

    需求 pdf页面显示在ios11以下的环境,合同的签名印章或签字会显示不出 解决方案(初步处理参考下文引用,这里是后续具体做法) 现在通过使用pdf.js插件,参考下文,引入自己的代码 我把gener ...

  10. 数组的三种声明方式总结、多维数组的遍历、Arrays类的常用方法总结

    1. 数组的三种声明方式 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] test ...