LuoGu P1083 借教室
借教室这个题有两种做法,差分+前缀和或者是线段树
线段树维护区间最小值,因为能不能借教室使用是由这几天中可用教室最少的一天决定的
其实这题是个很裸的线段树维护区间最小值,但有一点需要注意,区间最小值在进行加减修改时不能乘以区间长度
很简单,不论区间长度怎么样,你整个区间-x,最小值也减小了x,而不会是x*length,我因为这一点WA了两次(不知为啥,最近智商捉急)
之后就A掉了
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#define mid ((l+r)>>1)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define min(a,b) (a<b?a:b)
#define pushup(rt) t[rt].data=min(t[ls].data,t[rs].data)
using namespace std;
const int N=1e6+5;
struct segtree{
int left,right;
int data,tag;
inline int size(){return right-left+1;}
}t[(N<<2)];
int n,ans,f=true,tt;
int tot,s,cnt,v[N],m;
inline void build(int rt,int l,int r){
t[rt].left=l;t[rt].right=r;t[rt].tag=0;
if(l==r){
t[rt].data=v[l];
return ;
}
build(ls,l,mid);build(rs,mid+1,r);
pushup(rt);return ;
}
inline void pushdown(int rt){
if(t[rt].tag!=0){
t[ls].tag+=t[rt].tag;
t[rs].tag+=t[rt].tag;
t[ls].data+=t[rt].tag;
t[rs].data+=t[rt].tag;
t[rt].tag=0;
}
return ;
}
inline void update(int rt,int num){
int l=t[rt].left,r=t[rt].right;
if(s<=l&&r<=tt){
if(t[rt].data>=tot){
t[rt].data-=tot;
t[rt].tag-=tot;
}else{
f=false;
ans=num;
}
return ;
}
if(!f) return ;
pushdown(rt);
if(s<=mid) update(ls,num);
if(tt>mid) update(rs,num);
pushup(rt);return ;
}
int main(){
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;++i) scanf("%d",&v[i]);
build(1,1,n);
for(register int i=1;i<=m;++i){
scanf("%d%d%d",&tot,&s,&tt);
update(1,i);
}
if(f) puts("0");
else{
puts("-1");
printf("%d\n",ans);
}
return 0;
}
LuoGu P1083 借教室的更多相关文章
- luogu P1083 借教室 x
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- Luogu P1083 借教室【二分答案/差分】By cellur925
题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海 ...
- [NOIp2012] luogu P1083 借教室
该*的英语,这么长还要背. 题目描述 你有 nnn 个数 ai{a_i}ai,mmm 次操作,每次操作将 [l,r][l,r][l,r] 区间的每个数减去 ccc.要求任何时刻 ∀x∈[1,n]\f ...
- Luogu 1083 借教室(二分,差分)
Luogu 1083 借教室(二分,差分) Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不 ...
- P1083 借教室(差分+二分)
P1083 借教室 第一眼:线段树. 然鹅懒得写. 正解:差分+二分. 显然订单合法的上线可以二分 然后差分数组维护一下.没了. #include<iostream> #include&l ...
- 洛谷P1083 借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- 【题解】洛谷 P1083 借教室
目录 题目 思路 \(Code\) 题目 P1083 借教室 思路 线段树.需要的操作为区间修改,区间查询.维护每个区间的最小值就好. \(Code\) #include<iostream> ...
- 洛谷 P1083 借教室 题解
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- VIjos——V 1782 借教室 | | 洛谷——P1083 借教室
https://vijos.org/p/1782|| https://www.luogu.org/problem/show?pid=1083 描述 在大学期间,经常需要租借教室.大到院系举办活动,小到 ...
随机推荐
- luogu 1640 连续攻击游戏
二分图匹配,将需要进行的编号(1-10000)和物件进行匹配,而非编号之间,编号对应物品 #include<bits/stdc++.h> using namespace std; ; ; ...
- HashMap中的TreeNode,红黑树源码分析
在看HashMap的源码时候看到了TreeNode.因此需要对其进行一个了解.是一个红黑树.可以百度一下红黑树的数据结构.分析了下源码,还是比较枯燥的 红黑树的性质:本身是一个二叉查找树(所有左节点的 ...
- Dapper.net Insert mssql unicode 乱码问题
1.效果: 2.处理方法: /// <summary> /// insert single sql /// </summary> /// <typeparam name= ...
- Myschool乱码问题 和mysql 备份还原
show variables like 'character_set%'; alter table users modify username ) character set gbk; alter t ...
- MacOS英文版Google浏览器添加印象笔记剪藏插件
1 切换到国内的Google应用商店安装 https://chrome.google.com/webstore/detail/evernote-web-clipper/pioclpoplcdbaefi ...
- 【blog】SpringMVC返回RSS格式的XML数据
代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...
- Java_常遇问题(一)
Java_常遇问题 1.100/3 保留两位小数,处理方式: 业务场景一般在金额上 int a = 100, b =3; double result = Double.valueOf(new Deci ...
- 给出随机存储器(RAM)和只读存储器(ROM)的差别
给出随机存储器(RAM)和只读存储器(ROM)的差别
- 顶层const
顶层const:指针本身是一个常量 底层const:指针所指对象是一个常量 顶层const可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型.类.指针等 底层const则与指针和引用等复 ...
- const的引用
const的引用 对常量的引用:把引用绑定到const对象上,就像绑定到其他对象上一样,不能被用作修改它所绑定的对象: ; const int &r1 = ci;//正确:引用及其对应的对象都 ...