题意:n点m边,然后要求走最多的路,走路的时候经过的边权必须是严格递增。

解法1:传统的区间更新

解法2:发现区间更新只是对两个固定的点所延长形成的区间段,所以问题可以退化成单点更新单点查询。

然后动态开辟线段树就行了

线段树有1e5个然后每个都是权值线段树

解法一所需要的空间会比解法二大很多很多,甚至一度以为我写错了.....

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+;
int rt[N],L[N*],R[N*],V[N*],lz[N*];
int n,m,tot;
void update(int &k,int pos,int l,int r,int y){
if(!k) k=++tot;
if(l>=pos) {
V[k]=max(y,V[k]);
lz[k]=max(y,lz[k]);
return;
}
if(lz[k]) {
if(!L[k]) L[k]=++tot;if(!R[k]) R[k]=++tot;
lz[L[k]]=max(lz[L[k]],lz[k]);
lz[R[k]]=max(lz[k],lz[R[k]]);
V[L[k]]=max(V[L[k]],lz[k]);
V[R[k]]=max(V[R[k]],lz[k]);
lz[k]=;
}
int m=(l+r)>>;
if(pos<=m) update(L[k],pos,l,m,y);
update(R[k],pos,m+,r,y);
V[k]=max(V[L[k]],V[R[k]]);
}
int query(int l,int r,int w,int k){
if(!k) return ;
if(r<=w) return V[k];
int m=(l+r)>>;
if(lz[k]) {
if(!L[k]) L[k]=++tot;if(!R[k]) R[k]=++tot;
lz[L[k]]=max(lz[L[k]],lz[k]);
lz[R[k]]=max(lz[k],lz[R[k]]);
V[L[k]]=max(V[L[k]],lz[k]);
V[R[k]]=max(V[R[k]],lz[k]);
lz[k]=;
}
int ans=query(l,m,w,L[k]);
if(w>m) ans=max(ans,query(m+,r,w,R[k]));
return ans;
}
int main(){
scanf("%d%d",&n,&m);
int x,y,z,ans=;
for(int i=;i<=m;++i) {
scanf("%d%d%d",&x,&y,&z);
z+=;
int Q=query(,,z-,rt[x])+;
ans=max(ans,Q);
update(rt[y],z,,,Q);
}
printf("%d\n",ans);
}
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
int rt[N],L[N*],R[N*],V[N*];
int n,m,tot;
void update(int &k,int pos,int l,int r,int y){
if(!k) k=++tot;
V[k]=max(V[k],y);
if(l==r) return;
int m=(l+r)>>;
if(pos<=m) update(L[k],pos,l,m,y);
else update(R[k],pos,m+,r,y);
}
int query(int l,int r,int w,int k){
if(!k) return ;
if(l==r) return V[k];
int m=(l+r)>>;
if(w<=m) return query(l,m,w,L[k]);
else return max(V[L[k]],query(m+,r,w,R[k]));
}
int main(){
scanf("%d%d",&n,&m);
int x,y,z,ans=;
for(int i=;i<=m;++i) {
scanf("%d%d%d",&x,&y,&z);
z+=;
int Q=query(,,z-,rt[x])+;
ans=max(ans,Q);
update(rt[y],z,,,Q);
}
printf("%d\n",ans);
}

F. Pathwalks动态开辟线段树的更多相关文章

  1. E. Physical Education Lessons 动态开辟线段树区间更新

    E. Physical Education Lessons time limit per test 1 second memory limit per test 256 megabytes input ...

  2. [动态dp]线段树维护转移矩阵

    背景:czy上课讲了新知识,从未见到过,总结一下. 所谓动态dp,是在动态规划的基础上,需要维护一些修改操作的算法. 这类题目分为如下三个步骤:(都是对于常系数齐次递推问题) 1先不考虑修改,不考虑区 ...

  3. luoguP4719 【模板】动态 DP 线段树+树链剖分+矩阵乘法+动态DP

    题目描述 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y,表示修改点x的权值为y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入输出格式 输入格式: 第一行,n,m分 ...

  4. SP1716 GSS3 - Can you answer these queries III - 动态dp,线段树

    GSS3 Description 动态维护最大子段和,支持单点修改. Solution 设 \(f[i]\) 表示以 \(i\) 为结尾的最大子段和, \(g[i]\) 表示 \(1 \sim i\) ...

  5. AGC001 F - Wide Swap【线段树+堆+拓扑排序】

    给出的模型很难搞,所以转换一下,记p[i]为i这个数的位置,然后相邻两个p值差>k的能交换,发现使原问题字典序最小也需要使这里的字典序最小 注意到p值差<=k的前后顺序一定不変,那么可以n ...

  6. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  7. The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest - F.Sequence(打表+线段树)

    题意:给你一个长度为$n$的数组,定义函数$f(l,r)=a_{l} \oplus a_{l+1} \oplus...\oplus a_{r}$,$F(l,r)=f(l,l)\oplus f(l,l+ ...

  8. arc073 F many moves(dp + 线段树)

    设dp[i][y]表示一个点在x[i],另一个点在y时最小要走的步数 那么有以下转移 对于y != x[i-1]的状态,可以证明,他们直接加|x[i] - x[i-1]|即可(如果有其他方案,不符合对 ...

  9. 【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

    题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i) ...

随机推荐

  1. js 运动函数篇(二) (加速度运动、弹性运动、重力场运动(多方向+碰撞检测+重力加速度+能量损失运动)拖拽运动)层层深入

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写加速度运动.弹性运动.重力场运 ...

  2. 移动端rem适配&iOS兼容

    移动端rem适配js // 默认375,750设计稿请将375替换为750 (function (doc, win) { // 移动端适配 var docEl = doc.documentElemen ...

  3. CSS开发技巧(二):表格合并边框后的单元格宽度计算

    前言: 分离边框模型和合并边框模型是表格的两种模型,它通过以下属性确定: border-collapse:separate(默认值) | collapse | inherit 当采用分离边框模型时,表 ...

  4. #Lab0 Environment Building

    清华提供了实验环境的很多选项,具体可以参考README 我选择用虚拟机完成. 一.安装VirtualBox 下载链接 一路next,我的版本是6.0.4. 二.下载虚拟硬盘文件 实验所需的软件都在虚拟 ...

  5. 图论--最短路--SPFA模板(能过题,真没错的模板)

    [ACM常用模板合集] #include<iostream> #include<queue> #include<algorithm> #include<set ...

  6. CentOS启用iptables防火墙

    centos 7默认的防火墙使用firewall,系统服务管理方式也变更了,可以通过systemctl命令控制. 可以参考这个链接 但是习惯用iptables,可以按下面的操作改下 1.关闭firew ...

  7. Shell脚本(四)数组

    平时写脚本还没有用到过数组,暂时先记录下用法. #!/bin/bash array1=( ) array1_length=${#array1[@]} echo "array1 length: ...

  8. 抓住CoAP协议的“心”

    摘要 The Constrained Application Protocol(CoAP)是一种专用的Web传输协议,用于受约束的节点和受约束的(例如,低功率,有损)网络. 节点通常具有带少量ROM和 ...

  9. 如何发挥Visual Studio 2019强大的编辑功能轻松编辑Keil项目

    本文地址:https://www.cnblogs.com/jqdy/p/12565161.html 习惯了VS的强大编辑功能,对Keil 5越来越深恶痛绝.查阅网络文章后按图索骥初步实现了VS编辑Ke ...

  10. 微软原文翻译:适用于.Net Core的WPF数据绑定概述

    原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...