【BZOJ】1537: [POI2005]Aut- The Bus
【算法】DP+线段树求区间max(二维偏序)
【题解】
状态转移方程:f[i]=max(f[j]+v[i]),x[j]<x[i]&&y[j]<y[i]。
观察j的条件限制显然是二维偏序求最大值,套路化地离散化后一维排序+一维线段树即可解决。
最后在f[i]中找max,所以不用恢复原序。
复杂度O(n log n)。
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
const int maxn=;
int f[maxn],n,m,k;
inline int max(int x,int y){return x>y?x:y;}
struct lshs{int x,ord;}ls[maxn];
struct cyc{int x,y,v;}a[maxn];
struct tree{int l,r,mx;}t[maxn*];
bool cmps(cyc a,cyc b){return a.x<b.x||(a.x==b.x&&a.y<b.y);}
bool cmp(lshs a,lshs b){return a.x<b.x;}
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
void lsh(){
for(int i=;i<=k;i++)ls[i]=(lshs){a[i].x,i};
sort(ls+,ls+k+,cmp);
int p=;
for(int i=;i<=k;i++)if(ls[i].x==ls[i-].x)a[ls[i].ord].x=p;else a[ls[i].ord].x=++p;
n=p;
for(int i=;i<=k;i++)ls[i]=(lshs){a[i].y,i};
sort(ls+,ls+k+,cmp);
p=;
for(int i=;i<=k;i++)if(ls[i].x==ls[i-].x)a[ls[i].ord].y=p;else a[ls[i].ord].y=++p;
m=p;
}
void build(int k,int l,int r){
t[k].l=l;t[k].r=r;
if(l==r)return;
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
}
void insert(int k,int x,int y){
if(t[k].l==t[k].r){t[k].mx=max(t[k].mx,y);}
else{
int mid=(t[k].l+t[k].r)>>;
if(x<=mid)insert(k<<,x,y);
else insert(k<<|,x,y);
t[k].mx=max(t[k<<].mx,t[k<<|].mx);
}
}
int find(int k,int l,int r){
if(l<=t[k].l&&t[k].r<=r)return t[k].mx;
else{
int mid=(t[k].l+t[k].r)>>,mx=;
if(l<=mid)mx=find(k<<,l,r);
if(r>mid)mx=max(mx,find(k<<|,l,r));
return mx;
}
}
int main(){
n=read();m=read();k=read();
for(int i=;i<=k;i++){
a[i].x=read();a[i].y=read();a[i].v=read();
}
lsh();
sort(a+,a+k+,cmps);
build(,,m);
for(int i=;i<=k;i++){
f[i]=find(,,a[i].y)+a[i].v;
insert(,a[i].y,f[i]);
}
int ans=;
for(int i=;i<=k;i++)ans=max(ans,f[i]);
printf("%d",ans);
return ;
}
【BZOJ】1537: [POI2005]Aut- The Bus的更多相关文章
- 【BZOJ】1529 [POI2005]ska Piggy banks
[算法](强连通分量)并查集 [题解] 1.用tarjan计算强连通分量并缩点,在新图中找入度为0的点的个数就是答案. 但是,会爆内存(题目内存限制64MB). 2.用并查集,最后从1到n统计fa[i ...
- 【BZOJ】1535: [POI2005]Sza-Template
题意 给一个串\(s(1 \le |s| \le 500000)\),求一个最长的串,使得这个串能覆盖整个串(可以重叠). 分析 首先这个串肯定是前缀也肯定是后缀. 题解 对串kmp后,建立\(fai ...
- 【BZOJ】1532: [POI2005]Kos-Dicing
题意 \(n\)个人\(m\)场比赛\((1 \le n \le 10000, 0 \le m \le 10000)\),给出每场比赛的两个选手,求赢得最多的人最少赢的场数. 分析 二分最多人赢的场数 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3083】遥远的国度
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
随机推荐
- Learn Docker(一)—软件安装与常规操作
一.安装Docker Windows平台 在Windows10 X64专业版上可以直接下载Docker原生应用进行安装,在控制面板的程序与功能里启用Hyper-v,之后就可以运行docker程序啦. ...
- 注解实现IOC和DI
1.组件扫描 Spring3.0后为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component.@Service.@Controller.@Repository注解的类,并把这些类纳 ...
- 转载免安装版mysql的配置
解压到自定义目录,我这里演示的是D:\wamp\mysql\ 复制根目录下的my-default.ini,改名为my.ini,my.ini用下面内容替换 #以下是复制内容,这行可不复制 [clie ...
- phaser入手
做phaser小程序,必须先把环境弄好 发现怎么导入都无济于事. 最后决定亲自操刀,在原代码中,引入全局变量.
- 【C++】深度探索C++对象模型读书笔记--Data语意学(The Semantics of data)
1. 一个空类的大小是1 byte.这是为了让这一类的两个对象得以在内存中配置独一无二的地址. 2. Nonstatic data member 放置的是“个别的class object”感兴趣的数据 ...
- 使用Runtime.getRuntime().exec()方法的几个陷阱
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
- Xmind8破解,以及相关的流程和破解包
一.下载XMindCrack.jar文件:(传的貌似被屏蔽了:如果需要请留下邮箱,抽空会发给你) 百度云 ,里面破解文件,安装包都给了,但Xmind安装包不一定是最新的,有需求的可自行去官网下载 . ...
- 【转】小心stringstream.str()字符串用法的陷阱
--------------------- 作者:心中那自由的世界 来源:CSDN 原文:https://blog.csdn.net/119365374/article/details/7744678 ...
- 洛谷 P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- JVM堆内存控制/分代垃圾回收
JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后 ...