noip 借教室 线段树95分做法
大致的思路是用线段树维护每个区间内部的最小值 段更新最小值 每次查某个区间的最小值是否满足租借要求 满足就借出去 update最小值
注意pushdown操作 还有一个从子区间提取答案的操作
提交地址 http://www.cogs.pro/cogs/problem/problem.php?pid=1266
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#define lson rt<<1
#define rson rt<<1|1
#define getmid int mid=(l+r)/2
using namespace std;
const int maxn=; int n,m,mins[maxn*],tag[maxn*],A[maxn]; void pushdown(int rt)
{
if(tag[rt]!=)
{
mins[rt]+=tag[rt];
tag[lson]+=tag[rt];
tag[rson]+=tag[rt];
tag[rt]=;
}
} void bud(int l,int r,int rt)
{
if(l==r) {
mins[rt]=A[l];
return;
}
getmid;
bud(l,mid,lson);
bud(mid+,r,rson);
mins[rt]=min(mins[lson],mins[rson]);
} int query(int l,int r,int rt,int a,int b)
{
pushdown(rt);
if(a<=l && b>=r)
{
return mins[rt];
}
getmid;
int ans=<<;
if(a<=mid) ans=query(l,mid,lson,a,b);
if(b>mid) ans=min(ans,query(mid+,r,rson,a,b));
return ans;
} void update(int l,int r,int rt,int a,int b,int c)
{
pushdown(rt);
if(a<=l && b>=r)
{
tag[rt]+=c;
return;
}
getmid;
if(a<=mid) update(l,mid,lson,a,b,c);
if(b>mid) update(mid+,r,rson,a,b,c); mins[rt]=min(mins[lson]+tag[lson],mins[rson]+tag[rson]); } int main()
{
freopen("classrooms.in","r",stdin);
freopen("classrooms.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&A[i]);
}
bud(,n,); for(int i=,a,b,c;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
int tt=query(,n,,b,c);
if(tt>=a)
{
update(,n,,b,c,-a);
}
else
{
cout<<-<<endl<<i;
return ;
}
} cout<<;
fclose(stdin);
fclose(stdout);
return ;
}
noip 借教室 线段树95分做法的更多相关文章
- 洛谷 P1083 [ NOIP 2012 ] 借教室 —— 线段树 / 二分差分数组
题目:https://www.luogu.org/problemnew/show/P1083 当初不会线段树的时候做这道题...对差分什么不太熟练,一直没A,放在那儿不管... 现在去看,线段树就直接 ...
- NOIP2012借教室[线段树|离线 差分 二分答案]
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- NOIP2012 D2 T2 借教室 线段树 OR 二分法
题目描述: 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- 借教室 线段树and二分
描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望 ...
- [vijos1782]借教室<线段树>
题目链接:https://vijos.org/p/1782 题意:一个区间1,n.m次操作,每次操作让l,r区间值减去d,当有任何一个值小于0就输出当前是第几个操作 这道题其实是没有什么难度的,是 ...
- CH Round #52 还教室[线段树 方差]
还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...
- 洛谷 P3960 [ NOIP 2017 ] 列队 —— 线段树
题目:https://www.luogu.org/problemnew/show/P3960 NOIP 题,不用很复杂的数据结构...但又参考了许多: 要求支持维护删除第 k 个和在末尾插入的数据结构 ...
- noip借教室 题解
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...
- BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)
题目描述 Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他,每个点到其他的 ...
随机推荐
- XML代码生成器——XMLFACTORY 简介(一)
XML代码生成器——XMLFACTORY 简介(一) 软件开发中经常要和第三方应用交互数据,特别是在银行.电信行业,这种需求更是必不可少,往往一个系统要和三五个其它系统交互数据,而数据交换的报文经常采 ...
- Git 的详细使用
本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组. 在应用程序开发过程中,很重要的一部分工作就是如何进行 ...
- Impossible to load an image in xcassets on bundle
Impossible to load an image in xcassets on bundle up vote5down votefavorite 3 I need to include imag ...
- 总结C#保留小数位数及百分号处理
方法一: ); 方法二: Math.Round() 方法三: double dbdata = 0.55555; string str1 = dbdata.ToString("f2" ...
- 优化 UltraEdit 打开大文件时的性能
UltraEdit 原本就是被设计成可以打开超大文件的工具,只不过在默认情况下需要进行以下优化设置: 禁止临时文件 禁止显示行号 禁止文件(回车 & 换行符)转换 禁止代码折叠 禁止显示函数列 ...
- java验证码前台技术
//下面是在前台jsp页面不用导工具的情况下制作的验证码的基本代码 $(function(){ //创建验证码 createCode(); jQuery.validator.addMethod( &q ...
- SQL NOT EXISTS
看了一篇文章,虽然知识点很简单,但是还是帮我理解了一些以前没想到的东西 一共三个表student,class,score create table student(sno varchar(50) no ...
- C# 导入Excel到DataSet中
class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...
- linux下查看系统信息
lspci: 这个工具用来查看所有连接到pci总线上的所有设备信息. 如果有些系统没有lspci,安装后即可使用,有些老死的版本中需要root权限才可使用. 一些用法: lspci 列出所有 ...
- 使用zfs进行pg的pitr恢复测试
前段时间做了一下zfs做pg的增量恢复测试,mark一下. 服务器信息: 主机:192.168.173.43 备机:192.168.173.41 主备使用流复制搭建,在备机上面进行了zfs快照备份. ...