$Noip2012/Luogu1083$ 借教室
$Sol$
区间整体加减? 差分+树状数组维护前缀和!
那每给一个人借完教室之后都要判断一下现在合不合法?那复杂度比暴力还不如些...
注意到这里的单调性,假设给前$x$个人借完教室之后就不合法了,那给前$x+1,x+2.....$个人借教室一定也是不合法的.于是可以二分第一个需要修改申请的人,然后$check()$.$check()$里在借完所有的人教室之后再判断合不合法就好了,而且就用不着树状数组了.
$upd:$还有一种方法,是线段树,比较简单粗暴易想,维护区间减和区间$min$值即可.
$over.$
$Code$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Rg int x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*y;
}
const int N=1000010;
int n,m,r[N],d[N],s[N],t[N],a[N],as;
il bool ck(int x)
{
mem(a,0);
go(i,1,x)
{
a[s[i]]+=d[i];
a[t[i]+1]-=d[i];
}
Rg int nw=0;
go(i,1,n){nw+=a[i];if(nw>r[i])return 1;}
return 0;
}
int main()
{
n=read(),m=read();
go(i,1,n)r[i]=read();
go(i,1,m)d[i]=read(),s[i]=read(),t[i]=read();
Rg int l=1,r=m,mid;
while(l<=r)
{
mid=(l+r)>>1;//cout<<l<<" "<<r<<" "<<mid<<endl;
if(ck(mid))as=mid,r=mid-1;
else l=mid+1;
}
if(!as)printf("0\n");
else printf("-1\n%d\n",as);
return 0;
}
随机推荐
- deepin 15.11 升级docker-ce 18.01到19.03.1,升级docker compose 1.23到1.24.1
1.升级docker compose ,docker官方安装方法 $ sudo curl -L "https://github.com/docker/compose/releases/dow ...
- SSH基本原理
SSH原理与运用:远程登录 作者: 阮一峰 年12月21日 SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不 ...
- 杭电多校第二场1012 L - Longest Subarray ce 线段树
这题是真的秀...我服了...线段树用好了,感觉什么都可以写... 题目大意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次. 我们对于每一 ...
- Jieba分词包(一)——解析主函数cut
1. 解析主函数cut Jieba分词包的主函数在jieba文件夹下的__init__.py中,在这个py文件中有个cut的函数,这个就是控制着整个jieba分词包的主函数. cut函数的定义如 ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...
- vs code 如何修改默认主题的注释颜色
平时喜欢将注释的颜色调成绿色,既不刺眼,也比较醒目,在大型项目中,能很容易的根据注释找道想要的部分:但是,每次修改完使用一段时间后,当vs code 自动更新了,又变成默认的颜色了,为了方便每次快速修 ...
- Python--day41--线程池--python标准模块concurrent.futures
1,线程池代码示例:(注:进程池的话只要将以下代码中的ThreadPoolExecutor替换成ProcessPoolExecutor即可,这里不演示) import time from concur ...
- java 文件过滤器 java.io.FilenameFilter
File 类里有方法: String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录. File ...
- 免费开源3D模型设计软件汇总
免费开源3D模型设计软件汇总 3D 打印需要先通过计算机辅助设计(CAD)进行建模,再将建好的3D模型“分割”成逐层的截面,从而指导3D打印机进行逐层打印.因此用于3D打印的3D模 型大都储存或输出成 ...
- H3C 根据子网数划分子网