大致的思路是用线段树维护每个区间内部的最小值 段更新最小值 每次查某个区间的最小值是否满足租借要求 满足就借出去 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 ;
}

最新文章

  1. android Base64 加密
  2. 基本组件的使用&mdash;&mdash;UINavigationController
  3. SQL 对时间的处理
  4. java虚拟机启动参数分类详解
  5. Flex布局语法与实践
  6. PAT A 1016. Phone Bills (25)【模拟】
  7. HDU----(4519)郑厂长系列故事——体检
  8. Longest common prefix | leetcode
  9. [汇编语言]-第九章 jcxz,loop指令,转移位移的意义
  10. 十年过去了,各位 .net 兄弟还好吗
  11. [译]使用explain API摆脱ElasticSearch集群RED苦恼(转)
  12. 学习android开发之路(一)页面布局
  13. CSS 埋点统计
  14. Linux系统安装IDS(snort工具)
  15. ALGO-30_蓝桥杯_算法训练_入学考试DP)
  16. SPOJ4580 ABCDEF(meet in the middle)
  17. 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
  18. .NET:事务、并发、并发问题、事务隔离级别、锁等相关资料整理
  19. ASP.NET Core AD 域登录 (转载)
  20. AWS系列-添加购买的https证书

热门文章

  1. Objective C运行时(runtime)
  2. 10道javascript笔试题
  3. 第五章 搭建 S3C6.410 开发板的 测试环境
  4. C++学习笔记26:泛型编程概念
  5. 使用Quartz.net动态设置定时时间问题
  6. iOS与JS交互实战篇(ObjC版)
  7. Java socket长连接代码实现
  8. C语言标准库函数(网络上copy的)
  9. jQuery 简介
  10. [NOIP2015] 子串(dp)