luoguP3431 [POI2005]AUT-The Bus
安利系列博文
https://www.cnblogs.com/tyner/p/11565348.html
https://www.cnblogs.com/tyner/p/11605073.html
做个小总结
树状数组二维数点的特征:
- 矩阵(假设x轴从左到右,y轴从下到上)
- 是树状数组可以维护的
能用树状数组的要求 :
- 维护的东西要有前缀性(说人话:比如我们平常用它来维护的前缀和,就有前缀性(这不是废话么,
- 如果是求任意区间的信息,它要有可减性(因为我们是运用前缀性求得的任意区间)(说人话:我们求区间[l,r]的和,用[1, r]减去[1, l-1]的信息即可
https://www.luogu.org/problem/P3431
可是这题是要维护的是max, 即二维数max,这max 和min一样,都木有可减性
所以树状数组本来是不支持修改和维护max(min)的
但这题的每次修改都只会使原值越来越大(越来越小),所以才可以套用,来维护max(min)
(要是可以改得比原值小,显然就不能用树状数组维护了
(但这个貌似也是只能维护左端点为1的最值。。。
#include<cstdio>
#include<algorithm>
using namespace std;
int read() {
char ch = getchar(); int f=1, x=0;
while(ch<'0' || ch>'9') {if(ch=='-') f=-1; ch = getchar();}
while(ch>='0' && ch<='9') {x = x*10+ch-'0'; ch = getchar();}
return x*f;
}
const int MAX = 100000+99;
#define lowbit(x) (x&-x)
int n,m,k;
int tot;
long long t[MAX];
long long f[MAX];//f[i]:第i个车站的最大载人数,则f[i] = max(f[j]) + v[i], a[j].x∈[1, a[i].x]//注意可以等于a[i].x
struct node{
int xx, x, y, v;
}a[MAX];
bool cmp1(node a, node bb) {
return a.xx < bb.xx;
}
bool cmp2(node a, node bb) {
return (a.y<bb.y) || (a.y==bb.y && a.x<bb.x);
}
long long query(int x) {
long long mx = 0;
while(x) mx=max(mx, t[x]), x-=lowbit(x);//.........
return mx;
}
void add(int x, long long v) {//单点修改
while(x <= tot) t[x] = max(t[x], v), x+=lowbit(x);//.....想想树状数组的结构
}
int main() {
n=read(), m=read(), k=read();
for(int i = 1; i <= k; i++) a[i].xx=read(), a[i].y=read(), a[i].v=read();
sort(a+1, a+1+k, cmp1);
tot = 1;
a[1].x = 1;
for(int i = 2; i <= k; i++) {
if(a[i].xx != a[i-1].xx) ++tot;
a[i].x = tot;
}
sort(a+1, a+1+k, cmp2);
for(int i = 1; i <= k; i++) {
f[i] = query(a[i].x) + a[i].v;
add(a[i].x, f[i]);
}
printf("%lld\n", query(tot));//注意,这还要更新 x = tot直线
}
luoguP3431 [POI2005]AUT-The Bus的更多相关文章
- 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)
网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...
- bzoj 1537: [POI2005]Aut- The Bus 线段树
bzoj 1537: [POI2005]Aut- The Bus 先把坐标离散化 设f[i][j]表示从(1,1)走到(i,j)的最优解 这样直接dp::: f[i][j] = max{f[i-1][ ...
- BZOJ1537: [POI2005]Aut- The Bus
1537: [POI2005]Aut- The Bus Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 158 Solved: 100[Submit][S ...
- BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)
对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值. -------------- ...
- 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus
P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...
- 洛谷P3431 [POI2005]AUT-The Bus
P3431 [POI2005]AUT-The Bus 题目描述 The streets of Byte City form a regular, chessboardlike network - th ...
- Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]
1537: [POI2005]Aut- The Bus Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 264[Submit][S ...
- 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)
题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...
- bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)
[题意] 顺序经过k个点,求获得的最大权值和. [思路] 设f[i]表示到第i个点,则有转移式: f[i]=min{ f[j]+w[i] } x[j]<=x[i],y[j]<=y[i] 满 ...
随机推荐
- Transportable tablespace on standby (Doc ID 788176.1)
APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 10.2.0.4 [Release 10.2]Oracle ...
- 获取当前Linux的外网地址
有时候我们在测试配置外网IP是不是成功时,我们需要使用一些命令,使用 ssh 登录可以查看ip, 还有一种可以使用命令: curl ifconfig.me 进行方便获取,公网IP:真的是非常好的服务: ...
- 201871010114-李岩松《面向对象程序设计(java)》第十六周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 将静态页面部署到github.io
背景: 我的腾讯云服务器是之前利用学生身份(有优惠)买的,现在快到期了,而且服务器上面只有一个引导页(静态页面)还有用,别的项目都没有用了.所以就想找一种不花钱买服务器就可以访问到我的引导页的方法 ...
- phoenix中添加二级索引
Phoenix创建Hbase二级索引 官方文档 1. 配置Hbase支持Phoenix创建二级索引 1. 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml ...
- Vue 监听键盘,键盘修饰符keyup
附录:键盘Key Code对照表 代码: <!doctype html> <html lang="en"> <head> <meta ch ...
- 一道常被人轻视的web前端常见面试题(JS)
本文转载自站长之家,如有侵权问题,请联系我,马上删除. 面试题是招聘公司和开发者都非常关心的话题,公司希望通过它了解开发者的真实水平和细节处理能力,而开发者希望能够最大程度地展示自己的水平(甚至超常发 ...
- 记录libreoffice实现office转pdf(适用于windows、linux)
由于目前的工作跟office打交道比较多,所以才有了此篇blog,需求是实现word转换pdf方便页面展示.之前lz采用的是jacob(仅支持windows)进行转换的,但是现在服务器改成linux显 ...
- Python连载45-XML解析(使用minidom和etree分别示例)
一.我们对XML的读取进行一波演示 import xml.dom.minidom #负责解析xml文件的包 from xml.dom.minidom import parse #使用minidom ...
- Sql ----- sqlserver 中的if 判断 case... when
与查询放到一块使用: 语法: select case when 范围条件 then 产生的结果 when 范围条件 then 产生的结果 else 不是以上范围产生的结果 end from 表名 个人 ...