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换教室......

最新文章

  1. SQLite学习笔记(十二)&amp;&amp;虚拟机指令
  2. linux 几个控制流语句的格式例子(if语句)
  3. Mac系统下lipo, ar, nm等工具的使用简介
  4. 使用 TRegistry 类[1]: 显示各主键下的项
  5. Mysql note
  6. java jdbc使用配置文件连接数据库:
  7. jquery-动态设置ul li a链接目标
  8. 【HDOJ】1561 The more, The Better
  9. Java排序算法之堆排序
  10. python爬虫数据解析之BeautifulSoup
  11. 【eclipse】eclipse报错:the resource is not on the build path of a java project
  12. dns配置文件
  13. 【转】Java开发必须要知道的知识体系
  14. Scala进阶之路-反射(reflect)技术详解
  15. LeetCode Next Greater Element III
  16. hive连接数
  17. 前段基础JavaScript
  18. 牛客假日团队赛1 A.蹄球锦标赛
  19. Tarjan的学习笔记 求割边求割点
  20. C#使用SendMessage发送组合键

热门文章

  1. Hibernate初始化创建SessionFactory,Session,关闭SessonFactory,session
  2. JavaScript中的垃圾收集机制
  3. popen, pclose - process I/O
  4. NLP 中 Attention Model 解析
  5. CentOS7安装mysql8.0编译报错集合
  6. 一、ARM
  7. 动态新增删除tbody表格行与ajax请求完成后刷新父窗口问题
  8. php中判断数组键值,array_key_exists和isset区别
  9. AGC036C GP 2
  10. web前后端分离漏洞分析防御