NOIP2012提高组D2T2。

这道题目非常基础,正解貌似是二分+差分数组,在这里提供一种线段树的思路。

很容易发现题目让我们每次修改一段区间,然后我们只需要看每一个区间内有没有负数就可以了。可以用线段树维护每个区间内的最小值,修改的话就直接减就可以了,不要忘了标记下放(否则只有5分...)最后查看1-n内最小值是否为负数即可。

参考代码如下:

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define mid (l+r)/2
#define lc k*2
#define rc k*2+1
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
if(f)return x;return -x;
}
struct node
{
int l,r,tag,w;
}tree[];
int n,m,x,y,val,num;
void pushup(int k){tree[k].w=min(tree[lc].w,tree[rc].w);}
void build(int l,int r,int k)
{
tree[k].l=l;tree[k].r=r;
if(l==r){tree[k].w=read();return;}
build(l,mid,lc);build(mid+,r,rc);
pushup(k);
}
void pushdown(int k)
{
tree[lc].tag+=tree[k].tag;tree[rc].tag+=tree[k].tag;
tree[lc].w-=tree[k].tag;tree[rc].w-=tree[k].tag;
tree[k].tag=;
}
void add(int k)
{
int l=tree[k].l,r=tree[k].r;
if(l>=x&&r<=y)
{
tree[k].w-=val;
tree[k].tag+=val;
if(tree[k].w<)
{
cout<<-<<endl<<num<<endl;
exit();
}
return;
}
if(tree[k].tag)pushdown(k);
if(x<=mid)add(lc);
if(y>mid)add(rc);
pushup(k);
}
int main()
{
//freopen("classroom.in","r",stdin);
//freopen("classroom.out","w",stdout);
n=read();m=read();
build(,n,);
for(int i=;i<=m;i++)
{
num=i;val=read();x=read();y=read();
add();
}
cout<<<<endl;
//fclose(stdin);
//fclose(stdout);
return ;
}

成功做完关于classroom的题目:NOIP2012D2T2借教室,NOIP2016D1T3换教室......

[NOIP2016]借教室的更多相关文章

  1. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  2. NOIP2012借教室[线段树|离线 差分 二分答案]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  3. [NOIP2012] 提高组 洛谷P1083 借教室

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  4. 借教室(codevs 1217)

    1217 借教室 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...

  5. NOIp 2012 #2 借教室 Label:区间修改线段树

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  6. NOIP 2012 Day2T2 借教室题解

    NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...

  7. 【NOIP2012】借教室

    因为本校OJ+1s所以用线段树水过了,不去syz的水库水这题还真不知道线段树过不了= = 原题: 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的 ...

  8. NOIP 2012 T5 借教室 [洛谷P1083]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  9. NOIP2012 借教室

    描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样.面对海量租借教室的信息,我们自然希望编 ...

随机推荐

  1. Maya2017下载安装与激活

    目录 1. 更多推荐 2. 下载地址 2.1. OneDrive 2.2. 百度云 3. 安装激活步骤 1. 更多推荐 其他Maya版本的下载与激活:https://www.cnblogs.com/c ...

  2. centos下通过conda安装pytorch

    一.安装anaconda anaconda安装简单,只要确定自己的系统即可,具体安装请参考这里 二.确定自己的系统版本 我的是centos cat /etc/redhat-release 查看linu ...

  3. static作用,静态成员变量和静态成员函数

    static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接.   随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长.     在类的内部使用s ...

  4. 2019hdu多校3 hdu4893(线段树单点 区间更新

    补这题主要是因为第三个操作要维护区间,而不是点,否则会T. https://vjudge.net/problem/HDU-4893 题意:输入n.q.表示有n个数,初始化默认这n个数都为零,有q次操作 ...

  5. 英语单词Obsolete

    Obsolete 来源——命令帮助 [root@centos73 ~]# help typeset typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...

  6. C# 获取路径中,文件名、目录、扩展名等

    string path = "C:\\dir1\\dir2\\foo.txt"; string str = "GetFullPath:" + Path.GetF ...

  7. Codeforces Round #608 (Div. 2) E - Common Number (二分 思维 树结构)

  8. 面向对象编程思想(OOP)(转发)

    本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...

  9. CSU 1556 Jerry's trouble

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1556 Description Jerry is caught by Tom. He ...

  10. HTTP和HTTPS协议,详解

    大纲 一.前言: 先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init, ...