安利系列博文

https://www.cnblogs.com/tyner/p/11565348.html

https://www.cnblogs.com/tyner/p/11605073.html

做个小总结

树状数组二维数点的特征

  1. 矩阵(假设x轴从左到右,y轴从下到上)
  2. 是树状数组可以维护的

能用树状数组的要求 :

  1. 维护的东西要有前缀性(说人话:比如我们平常用它来维护的前缀和,就有前缀性(这不是废话么,
  2. 如果是求任意区间的信息,它要有可减性(因为我们是运用前缀性求得的任意区间)(说人话:我们求区间[l,r]的和,用[1, r]减去[1, l-1]的信息即可

https://www.luogu.org/problem/P3431

可是这题是要维护的是max, 即二维数max,这maxmin一样,都木有可减性

所以树状数组本来是不支持修改和维护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的更多相关文章

  1. 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)

    网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...

  2. 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][ ...

  3. BZOJ1537: [POI2005]Aut- The Bus

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 158  Solved: 100[Submit][S ...

  4. BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)

    对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值. -------------- ...

  5. 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...

  6. 洛谷P3431 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus 题目描述 The streets of Byte City form a regular, chessboardlike network - th ...

  7. Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 264[Submit][S ...

  8. 洛谷 P3431:[POI2005]AUT-The Bus(离散化+DP+树状数组)

    题目描述 The streets of Byte City form a regular, chessboardlike network - they are either north-south o ...

  9. 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] 满 ...

随机推荐

  1. CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC

    本文章主要是记录,cuda 编程过程中遇到的相关概念,名字解释和问题:主要是是用来备忘: cuda PTX :并行线程执行(Parallel Thread eXecution,PTX)代码是编译后的G ...

  2. 失败的一天(找bug)

    前天早上来到实验室,准备抓紧时间写写代码,毕竟第二天就是组会了.点了一下鼠标,发现显示屏无法唤醒,然后就准备强制关机再开机(我一般不关机,以前遇到过几次无法唤醒),低头发现主机不亮,然后按了开关也不亮 ...

  3. day_92_11_14flask的启动和orm,反向生成model

    一.自定义命令. 在flask中也可以将应用改写成可以使用命令的形式,需要用到模块: pip install flask-script 使用关键字manage使得其能使用终端启动: from flas ...

  4. Java流程控制之选择语句

    选择语句 选择语句也称之为判断语句,主要有2种写法,一种是if语句,一种是switch语句.下面我们就详细的介绍一下这2种语句的用法. 判断语句if if语句第一种形式: if 格式: 执行流程 首先 ...

  5. Go 字节 (byte) & 文字符号 (rune)

    byte 通过 byte 定义一个字节,字节必须使用单引号包起来,直接打印字节输出的是 ascii 码,需要通过格式化输出 byte 是 uint8 的别称,使用 byte 主要是为了区分字节和无符号 ...

  6. Leetcode450. 删除二叉搜索树中的节点

    思路: (1)如果root为空,返回 (2)如果当前结点root是待删除结点: a:root是叶子结点,直接删去即可 b:root左子树不为空,则找到左子树的最大值,即前驱结点,使用前驱结点代替待删除 ...

  7. 【2019.10.7 CCF-CSP-2019模拟赛 T1】树上查询(tree)(思维)

    思维 这道题应该算是一道思维题吧. 首先你要想到,既然这是一棵无根树,就要明智地选择根--以第一个黑点为根(不要像我一样习惯性以\(1\)号点为根,结果直到心态爆炸都没做出来). 想到这一点,这题就很 ...

  8. MNIST 例程源码分析 TensorFlow 从入门到精通

    按照上节步骤, TensorFlow 默认安装在 /usr/lib/python/site-packages/tensorflow/ (也有可能是 /usr/local/lib……)下,查看目录结构: ...

  9. php 截取字符串 strstr 和strrchr

    截取字符串 strstr 和strrchr 结果:(其中之一) strstr : 执行时间在0.10 - 0.19 之间 strrchr : 执行时间在0.095 - 0.19 之间 结论:从数十次执 ...

  10. 感受一把面试官通过一道题目引出的关于 TCP 的 5 个连环炮!

    面试现场:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式什么顺序下载?建 ...