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 描述 在大学期间,经常需要租借教室.大到院系举办活动,小到 ...
随机推荐
- HACK入别人的游戏制作做MOD的几种技巧
要让某个游戏(程序)加载我们的MOD,目前有想到的有三种方式: 静态注入:静态注入,即我们HACK入游戏的某个dll,然后修改里面的代码,让程序在运行后加载我们的ModDll,比如U3D的游戏可以直接 ...
- 十四、文件和目录——文件时间和utime函数
14.1 文件时间 存在于 stat 结构体中 14.2 文件时间函数 14.2.1 介绍 utime(修改文件的存取时间和更改时间) 相关函数 utimes,stat #include <sy ...
- 【LeetCode】227. Basic Calculator
Problem: Implement a basic calculator to evaluate a simple expression string. The expression string ...
- 【noip 2014】提高组Day2T3.华容道
Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B ...
- Mysql 忘记密码
Mysql 忘记密码,跳过密码登陆,在更改密码. Linux 系统: 1.查看平时进程:杀掉mysql进程. kill -TERM mysqld 或者 : ps -ef | grep mysqld | ...
- python判断小数示例&写入文件内容示例
#需求分析: #1.判断小数点个数是否为1 #2.按照小数点分隔,取到小数点左边和右边的值 #3.判断正小数,小数点左边为整数,小数点右边为整数 #4.判断负小数,小数点左边以负号开头,并且只有一个负 ...
- sql server 2008 windows验证改混合登陆中SqlServer身份验证用户名密码
安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本主题介绍如何在安装后更改安全模式. 如果在安装过程中选择“ ...
- PKUSC2018游记
由于菜鸡DreamlessDreams还需要准备中考的原因....这篇游记拖到今天才发. Day0:出发+报道 ...
- Java strictfp有什么作用
- 【多线程补充】SimpleDateFormat非线程安全与线程中、线程组中异常的处理
1.SimpleDateFormat非线程安全的问题 类SimpleDateFormat主要负责日期的转换与格式化,但在多线程环境中,使用此类容易造成数据转换及处理的不正确,因为SimpleDateF ...