二分答案,没有出现过的时刻没有用,可以进行离散化。

首先如果某个时刻出现多个人数,那么肯定矛盾。

然后按时间依次考虑,维护:

$t$:剩余可选人数。

$s$:现在必定有的人数。

$cl$:往左延伸的人数。

$cr$:往右延伸的人数。

如果现在有人必须加入,那么优先踢掉$cl$的人。

如果当前人多了,那么优先让$cr$的人结束工作。

如果最后剩余可选人数非负,则可行。

时间复杂度$O((n+m)\log m)$。

#include<cstdio>
const int N=100010,BUF=33333333;
int T,n,m,i,e[N][3],l,r,mid,ans,a[N],b[N],c[N],p[N],L[N],R[N];char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline void umin(int&a,int b){if(a>b)a=b;}
inline void umax(int&a,int b){if(a<b)a=b;}
bool check(int mid){
int i,t,x,y,cnt=0,s=0,cl=0,cr=0;
for(i=1;i<=n;i++)L[i]=N,R[i]=0;
for(i=1;i<=m;i++)a[i]=0;
for(i=1;i<=mid;i++){
t=e[i][0],x=e[i][1],y=e[i][2];
if(a[t]&&a[t]!=y)return 0;
a[t]=y,umin(L[x],t),umax(R[x],t);
}
for(i=1;i<=m;i++)if(a[i])p[i]=++cnt,a[cnt]=a[i],b[cnt]=c[cnt]=0;
for(i=1;i<=n;i++)if(R[i])b[p[L[i]]]++,c[p[R[i]]]++;
for(t=n,i=1;i<=cnt;i++){
s+=b[i];
if(s>a[i])return 0;
while(b[i]--)if(cl>0)cl--;else t--;
while(s+cl+cr<a[i])cl++,t--;
while(s+cl+cr>a[i])if(cr>0)cr--;else cl--;
s-=c[i],cr+=c[i];
if(t<0)return 0;
}
return 1;
}
int main(){
for(fread(Buf,1,BUF,stdin),read(T);T--;printf("%d\n",ans)){
read(n),read(m);
for(i=1;i<=m;i++)read(e[i][0]),read(e[i][1]),read(e[i][2]),e[i][2]++;
l=2,r=m,ans=1;
while(l<=r)if(check(mid=(l+r)>>1))l=(ans=mid)+1;else r=mid-1;
}
return 0;
}

  

BZOJ3414 : Poi2013 Inspector的更多相关文章

  1. POI2013题解

    POI2013题解 只做了BZ上有的\(13\)道题. 就这样还扔了两道神仙构造和一道计算几何题.所以只剩下十道题了. [BZOJ3414][Poi2013]Inspector 肯定是先二分答案,然后 ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. 自定义Inspector检视面板

    Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型:(2)自定义类型,并使用[System.Serializable]关键字序列化,比如: [Sys ...

  4. 企业IT管理员IE11升级指南【16】—— 使用Compat Inspector快速定位IE兼容性问题

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  5. Delphi控件之---通过编码学习TStringGrid(也会涉及到Panel控件,还有对Object Inspector的控件Events的介绍

    我是参考了万一的博客里面的关于TStringGrid学习的教程,但是我也结合自己的实际操作和理解,加入了一些个人的补充,至少对我有用! 学用TStringGrid之——ColCount.RowCoun ...

  6. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)

    最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法. 初步的常用功能的简介 目前(2015.08 ...

  7. 一个美术需求引发的Custom Inspector

    需求 Editor模式下,在运行或者非运行状态下,能够按照指定的变化率来自动改变material中属性数值. 需求分析 如何在Editor模式下获得一个游戏对象及其组件,尤其是在非运行状态下?我们知道 ...

  8. nodejs 使用Google浏览器进行可视化调试——Node Inspector工具

    1.npm安装Node Inspector工具,全局安装 命令行执行npm install -g node-inspector 2.启动Node Inspector工具,命令行执行 node-insp ...

  9. 使用appium进行ios测试,启动inspector时遇到的问题(一)

    最近在公司,让做ios的自动化测试,因为以前做过android的自动化测试,用的也是appium,觉得没什么,结果一开始在搭建环境就遇到了很多的问题,现在将我遇到的问题,以及解决方法,给大家分享出来. ...

随机推荐

  1. html+css+js实现标签页切换

    CSS部分: #Tab { margin:0 auto; width:640px; border:none; position:absolute; z-index:9; margin-left:320 ...

  2. Mac 制作 10.11.3 U盘安装盘

    U盘要且只分一个区  Mac OS 拓展(日志式)  GUID分区表: 将“安装 OS X El Capitan” 放到  应用程序文件夹下 命令: sudo /Applications/Instal ...

  3. BlueTooth: 蓝牙基础知识进阶——链路控制操作

    转自:http://blog.csdn.net/augusdi/article/details/25887395 七链路控制操作 链路控制操作就是用来描述一个设备是如何加入piconet又是如何从一个 ...

  4. MVC4 WEBAPI(一)使用概述

    所谓概述,也就是总结一些WEB API常用的使用用法.MVC APIWEB是一个轻量级的服务接口,完全符合RestFul框架设计,每个URL代表一种资源,使用方便,没有WCF那么庞大,但是麻雀虽小五脏 ...

  5. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. .NET Nancy 详解(四) Self Host

    Self Host 使得Nancy 能够在任意application 中启动,无论是console 还是windows service.这期我们使用的版本是Nancy v0.4.0. Demo 首先看 ...

  7. Implementing Navigation with UINavigationController

    Implementing Navigation with UINavigationController Problem You would like to allow your users to mo ...

  8. phpcms v9中调用栏目及调用多个子栏目中的文章列表

    调用一个指定栏目列表:            {pc:content action="lists" catid="6" order="id DESC& ...

  9. windows64系统中mysql64位绿色安装

    将下载压缩包解压到任意目录 配置安装文件: # For advice on how to change settings please see# http://dev.mysql.com/doc/re ...

  10. MFC 丢失MSVCR120D.dll 丢失mfc120ud.dll