「雅礼集训 2017 Day2」水箱
题目链接
题意分析
我们用\(f[i][j]\)表示当前到达第\(i\)个位置水位高度为\(j\)的答案
如果那么\(h[i]\)为\(i\)和\(i+1\)之间的支柱高度
那么如果\(j≤h[i]\)的话
\(f[i+1][0...h[i]]=max\{f[i][0...h[i]]\}\)
否则的话 直接让\(f[i+1][j]=f[i][j]\)
发现第二种可以直接继承
第一种可以区间求\(max\)然后区间\(max\)覆盖
使用线段树维护
同时满足限制的话使用区间加
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>
#define ll long long
#define inf 0x7fffffff
#define N 500008
#define IL inline
#define M 608611
#define D double
#define ull unsigned long long
#define R register
using namespace std;
template<typename T>IL void read(T &_)
{
T __=0,___=1;char ____=getchar();
while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();}
while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();}
_=___ ? __:-__;
}
/*-------------OI使我快乐-------------*/
int T,n,m,cnt,tot;
int num[M],res[M],tre[M<<1],tag_cdy[M<<1],tag_wzy[M<<1];
vector<int> cdy[M],wzy[M];
IL void down(int si)
{
if(!tag_cdy[si]&&!tag_wzy[si]) return;
int d1=tag_cdy[si],d2=tag_wzy[si];
tag_cdy[si<<1]+=d1;
tag_cdy[si<<1|1]+=d1;
tag_wzy[si<<1]=max(tag_wzy[si<<1]+d1,d2);
tag_wzy[si<<1|1]=max(tag_wzy[si<<1|1]+d1,d2);
tre[si<<1]=max(tre[si<<1]+d1,d2);
tre[si<<1|1]=max(tre[si<<1|1]+d1,d2);
tag_cdy[si]=tag_wzy[si]=0;
}
IL void add(int si,int lenow,int rinow,int le,int ri,int d)
{
if(le>ri) return;
if(lenow==le&&ri==rinow)
{
tre[si]+=d;
tag_cdy[si]+=d;
tag_wzy[si]+=d;
return;
}
down(si);
int mid=(lenow+rinow)>>1;
if(ri<=mid) add(si<<1,lenow,mid,le,ri,d);
else if(mid<le) add(si<<1|1,mid+1,rinow,le,ri,d);
else add(si<<1,lenow,mid,le,mid,d),add(si<<1|1,mid+1,rinow,mid+1,ri,d);
tre[si]=max(tre[si<<1],tre[si<<1|1]);
}
IL void update(int si,int lenow,int rinow,int le,int ri,int d)
{
if(le>ri) return;
// printf("now at TREE is %d %d (%d %d)\n",lenow,rinow,le,ri);
if(lenow==le&&rinow==ri)
{
tre[si]=max(tre[si],d);
tag_wzy[si]=max(tag_wzy[si],d);
return;
}
down(si);
int mid=(lenow+rinow)>>1;
if(ri<=mid) update(si<<1,lenow,mid,le,ri,d);
else if(mid<le) update(si<<1|1,mid+1,rinow,le,ri,d);
else update(si<<1,lenow,mid,le,mid,d),update(si<<1|1,mid+1,rinow,mid+1,ri,d);
tre[si]=max(tre[si<<1],tre[si<<1|1]);
}
IL int qury(int si,int lenow,int rinow,int le,int ri)
{
if(le>ri) return -inf;
// printf("now at TREE is %d %d (%d %d)\n",lenow,rinow,le,ri);
if(lenow==le&&rinow==ri) return tre[si];
down(si);
int mid=(lenow+rinow)>>1;
if(ri<=mid) return qury(si<<1,lenow,mid,le,ri);
else if(mid<le) return qury(si<<1|1,mid+1,rinow,le,ri);
else return max(qury(si<<1,lenow,mid,le,mid),qury(si<<1|1,mid+1,rinow,mid+1,ri));
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
read(T);
while(T--)
{
memset(tre,0,sizeof tre);
memset(tag_cdy,0,sizeof tag_cdy);
memset(tag_wzy,0,sizeof tag_wzy);
memset(res,0,sizeof res);
read(n);read(m);res[tot=1]=inf;cnt=0;
for(R int i=1;i<n;++i) read(num[i]),res[++tot]=num[i];
for(R int i=1;i<=n;++i) cdy[i].clear(),wzy[i].clear();
for(R int i=1,x,y,z;i<=m;++i)
{
read(x);read(y);read(z);
if(!z) cdy[x].push_back(y);
else wzy[x].push_back(y);
res[++tot]=y;res[++tot]=y+1;
}
sort(res+1,res+tot+1);cnt=unique(res+1,res+tot+1)-res-1;
for(R int i=1;i<n;++i) num[i]=lower_bound(res+1,res+cnt+1,num[i])-res;
for(R int i=1;i<=n;++i) sort(cdy[i].begin(),cdy[i].end()),sort(wzy[i].begin(),wzy[i].end());
// puts("now now now");
for(R int i=1;i<=n;++i)
{
for(R int j=0;j<(int)cdy[i].size();++j)
{
// puts("now okoko");
int now=lower_bound(res+1,res+cnt+1,cdy[i][j])-res;
add(1,1,cnt,1,now,1);
// puts("now okoko have");
}
for(R int j=0;j<(int)wzy[i].size();++j)
{
// puts("now okokookokoookoo");
int now=lower_bound(res+1,res+cnt+1,wzy[i][j])-res;
add(1,1,cnt,now+1,cnt,1);
// puts("now okoko havehave");
}
if(i==n) break;
// puts("acsese");
int tmp=qury(1,1,cnt,1,num[i]);
// puts("sdfjsdhfj");
update(1,1,cnt,1,num[i],tmp);
// puts("weihjisdhgiuwe");
}
printf("%d\n",tre[1]);
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
HEOI 2019 RP++
「雅礼集训 2017 Day2」水箱的更多相关文章
- loj #6032. 「雅礼集训 2017 Day2」水箱 线段树优化DP转移
$ \color{#0066ff}{ 题目描述 }$ 给出一个长度为 \(n\) 宽度为 \(1\) ,高度无限的水箱,有 \(n-1\) 个挡板将其分为 \(n\) 个 \(1 - 1\) 的小格, ...
- 「雅礼集训 2017 Day2」水箱 (数据结构+dp ,一个log)
题面 题解 在网上看到有些做法,有什么平衡树.启发式合并等等总之复杂度O(Tnlog^2(n))的不优做法,这里我就用一个O(Tnlogn)的做法好了 其实大体上推导的思路都是一样的. 我们很容易发现 ...
- loj#6032. 「雅礼集训 2017 Day2」水箱(并查集 贪心 扫描线)
题意 链接 Sol 神仙题+神仙做法%%%%%%%% 我再来复述一遍.. 首先按照\(y\)坐标排序,然后维护一个扫描线从低处往高处考虑. 一个连通块的内状态使用两个变量即可维护\(ans\)表示联通 ...
- LOJ#6032. 「雅礼集训 2017 Day2」水箱
传送门 首先可以有一个平方复杂度的 \(DP\) 设 \(f_{i,j}\) 表示前面 \(i\) 个小格,高度为 \(j\) 的最大答案 令 \(h_i\) 表示隔板 \(i\) 的高度 当 \(j ...
- 「雅礼集训 2017 Day2」解题报告
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
- #6034. 「雅礼集训 2017 Day2」线段游戏 李超树
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统 ...
- 【loj6034】「雅礼集训 2017 Day2」线段游戏
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:Special Judge 上传者: 匿名 题目描述 ...
- loj#6033. 「雅礼集训 2017 Day2」棋盘游戏(二分图博弈)
题意 链接 Sol 第一次做在二分图上博弈的题..感觉思路真是清奇.. 首先将图黑白染色. 对于某个点,若它一定在最大匹配上,那么Bob必胜.因为Bob可以一直沿着匹配边都,Alice只能走非匹配边. ...
- [LOJ#6033]. 「雅礼集训 2017 Day2」棋盘游戏[二分图博弈、匈牙利算法]
题意 题目链接 分析 二分图博弈经典模型,首先将棋盘二分图染色. 考虑在某个最大匹配中: 如果存在完美匹配则先手必败,因为先手选定的任何一个起点都在完美匹配中,而后手则只需要走这个点的匹配点,然后先手 ...
随机推荐
- 最多有k个不同字符的最长子字符串 · Longest Substring with at Most k Distinct Characters(没提交)
[抄题]: 给定一个字符串,找到最多有k个不同字符的最长子字符串.eg:eceba, k = 3, return eceb [暴力解法]: 时间分析: 空间分析: [思维问题]: 怎么想到两根指针的: ...
- DALSA网口线扫相机SDK开发详解例程(C#版)
首先吐槽一句,官方的demos写的真的不好,坑爹啊.对于小白来说,开发官方demos为我所用太难了.为什么呢?因为它Dalsa的DALSA.SaperaLT.SapClassBasic.dll中,不仅 ...
- .net分布在指定文件夹的web.confgi或者app.config
.Net里面,ConfigurationManager默认读取的是Web.config或者App.config但是,什么都放在这两个文件里面,感觉太多了,也不好管理配置.于是参考了下别人的资料,自己写 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- SpringCloud之服务注册-eureka
类似于DUBBO 的zookeeper, SpringCloud本身提供一套服务注册中心--eureka 与zookeeper的区别在于 1:zookeeper本身就是一个应用,安装即可用:eurek ...
- 测试用数据库表设计和SessionFactory
本篇为struts-2.5.2和spring-3.2.0以及hibernate-4.2.21的整合开篇. 一.测试的数据库表. 用户.角色和权限关系表.数据库是Mysql5.6.为了考虑到一些特殊数据 ...
- 【PAT】1063. Set Similarity (25) 待改进
Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the ...
- [SAP]编辑表
SAP中,不能直接修改表的内容,可以用SE16N进行调试打开编辑选项,进行修改. (注:直接修改数据有风险,首先要确认修改数据的关系或做好必要的备份) 1:运行SE16N ,填好表名,参数等. 2:在 ...
- AndroidStudio-Error Please select Android SDK
这里是×错误信息: 点击运行提示,Error:Please select Android SDK: 网上说了很多解决办法都不靠谱,只有这种方式是可以解决的: 点击:Exit: 红框的感叹号!已经提示了 ...
- ASP.NET:邮件服务器与客户端
目录: 一.概述 二.MX设置 三.使用系统的SMTP功能发邮件 四.使用hMailServer收发邮件 五.Web邮件客户端 一.概述 首先必须清楚SMTP才是提供邮件服务器的核心,收发邮件全靠SM ...