POI阴影又发作了
但这道题挺好的,比较涨知识
裸的想法是裸的每次二分图匹配,但显然会TLE
这里就要引入Hall定理:
二分图G中的两部分顶点组成的集合分别为X, Y, X={X1, X2, X3,X4,.........,Xm}, Y={y1, y2, y3, y4 ,.........,yn},
图G中有一组无公共点的边,一端恰好为组成X的点的充分必要条件是:
X中的任意k个点至少与Y中的k个点相邻。(1≤k≤m)
任意这个东西相当烦,不能穷举,也不知道底要取X集合中哪些点来判断,乍一看还是不怎么好弄
但是这个图很特殊,把人看做X集合,鞋看做Y集合
因为同一鞋号x的人连的鞋都是[x,x+d],所以集合X中同一个鞋号里的人要么取要么都不取(全取比取部分一定更具代表性)
然后再看,鞋号为x+1的人连的鞋是[x+1,x+1+d],会有[x+1,x+d]的点被鞋号为x+1的人重复连了
也就是人鞋号是连续的时候连接的鞋最少
显然,所取的鞋号为连续的更有代表性(更可能出现不满足的情况)
因此,我们必须对于任意一段连续鞋号[l,r]
满足sigma(xi) (i∈[l,r]) <=(r-l+1+d)*k
也就是 sigma(xi)<=(r-l+1)*k+d*k
即 sigma(xi-k)<=d*k
也就是我们只要找出当前最长连续子序列与d*k比较就可以了
由于要修改,所以我们用线段树来维护

好,到这里我又要说pascal的不幸了,TLE到死……实在懒得卡常数了,就交了c++的

 type node=record
lm,rm,mm,s:int64;
end; var tree:array[..] of node;
n,m,k,d,i,x,y:longint;
t:int64; function max(a,b:int64):int64;
begin
if a>b then exit(a) else exit(b);
end; procedure work(i,l,r:longint);
var m:longint;
begin
if l=r then
begin
tree[i].s:=tree[i].s+y;
tree[i].lm:=tree[i].s;
tree[i].rm:=tree[i].s;
tree[i].mm:=tree[i].s;
end
else begin
m:=(l+r) shr ;
if x<=m then work(i*,l,m)
else work(i*+,m+,r);
tree[i].lm:=max(tree[i*].lm,tree[i*].s+tree[i*+].lm);
tree[i].rm:=max(tree[i*+].rm,tree[i*+].s+tree[i*].rm);
tree[i].mm:=max(tree[i*].mm,tree[i*+].mm);
tree[i].mm:=max(tree[i].mm,tree[i*].rm+tree[i*+].lm);
tree[i].s:=tree[i*].s+tree[i*+].s;
end;
end; procedure build(i,l,r:longint);
var m:longint;
begin
if l=r then
begin
tree[i].s:=-k;
tree[i].lm:=-k;
tree[i].rm:=-k;
tree[i].mm:=-k;
end
else begin
m:=(l+r) shr ;
build(i*,l,m);
build(i*+,m+,r);
tree[i].lm:=max(tree[i*].lm,tree[i*].s+tree[i*+].lm);
tree[i].rm:=max(tree[i*+].rm,tree[i*+].s+tree[i*].rm);
tree[i].mm:=max(tree[i*].mm,tree[i*+].mm);
tree[i].mm:=max(tree[i].mm,tree[i*].rm+tree[i*+].lm);
tree[i].s:=tree[i*].s+tree[i*+].s;
end;
end; begin
readln(n,m,k,d);
build(,,n);
t:=int64(k)*int64(d);
for i:= to m do
begin
readln(x,y);
work(,,n);
if tree[].mm<=t then
writeln('TAK')
else writeln('NIE');
end;
end.

bzoj1135的更多相关文章

  1. 【BZOJ1135】[POI2009]Lyz 线段树

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

  2. BZOJ1135: [POI2009]Lyz

    1135: [POI2009]Lyz Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 264  Solved: 106[Submit][Status] ...

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

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

  4. 【BZOJ1135】[POI2009]Lyz

    题解: hall定理..第一次听说 思考了半小时无果 二分图匹配时间显然太大 但是有这个hall定理 二分图有完美匹配的充要条件是 对于左边任意一个集合(大小为|s|),其连边点构成的集合(大小为|s ...

  5. [BZOJ1135][POI2009]Lyz[霍尔定理+线段树]

    题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的 ...

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

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

  7. [bzoj1135][Ceoi2011]Match_线段树

    [Ceoi2011]Match 题目大意:初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负, ...

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

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

  9. [bzoj1135]Lyz

    可以看成一张二分图,判断左半部分是否存在完美匹配根据hall定理,当且仅当左半部分每一个子集所连向的点数量超过了这个子集的大小都判定复杂度肯定爆炸,可以贪心,一定选择的是一个区间,即对于任意区间[l, ...

随机推荐

  1. IOS-AssetsLibrary(相册)框架介绍

    AssetsLibrary框架介绍: AssetsLibrary框架包含了ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRep ...

  2. linux 上查找pid,筛选出来

    ps -ef | grep httpd find / -name "1000sql.txt" 查找命令

  3. +load,+initialize原理

    +load,+initialize原理 1.load 父类的load方法在子类load方法之前调用,分类的load方法在原来类load方法之后调用,依赖类的load方法会在自己之前调用,总之所有的类的 ...

  4. win7、xp下Meclipse SVN用户名修改

    Meclipse SVN用户名修改,在网上查找后发现如下方法: 1.查看你的Eclipse中使用的是什么SVNInterface windows>preference>Team>SV ...

  5. 一次利用MSSQL的SA账户提权获取服务器权限

    遇到小人,把服务器整走了 自己手里只有sql server的sa账号密码 模糊记起之前用这个账户提权读取文件的事 百度之,发现相关信息一堆堆 各种工具也用了不少 发现不是语法错误就是权限不够 无奈之下 ...

  6. [原创] Fragment的添加、移除问题

    安卓一直在进化,Fragment就是个好东西,如果早5年做安卓开发,真要麻烦的多. 关于Fragment的讲解,这里很详尽: Android Fragment 真正的完全解析(上) Android F ...

  7. java异常类的使用

    1.异常的概念 什么是异常?程序出错分为两部分,编译时出粗和运行时出错.编译时出错是编译器在编译源码时发生的错误: 运行时出错是在编译通过,在运行时出现的错误.这种情况叫异常. 例如:数组越界,除数为 ...

  8. 远程推送,集成极光的SDK,证书制造

    由于iOS操作系统限制,我们APP在后台不能做操作,也不能接收任何数据,所以需要用推送来接收消息. APNs服务,苹果官方网址:https://developer.apple.com/library/ ...

  9. VisualStudio2013内置SQLServer入门

    最近做项目老大要求用到sqlserver,但是这项目的数据库只是本地演示用并不复杂,于是决定试试VisualStudio2013内置的SQLServer.对于这个东西的了解并没有多少,然后项目初学习的 ...

  10. 【BZOJ1861】【splay】Book 书架

    Description 小 T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿 ...