【算法】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的更多相关文章

  1. 【BZOJ】1529 [POI2005]ska Piggy banks

    [算法](强连通分量)并查集 [题解] 1.用tarjan计算强连通分量并缩点,在新图中找入度为0的点的个数就是答案. 但是,会爆内存(题目内存限制64MB). 2.用并查集,最后从1到n统计fa[i ...

  2. 【BZOJ】1535: [POI2005]Sza-Template

    题意 给一个串\(s(1 \le |s| \le 500000)\),求一个最长的串,使得这个串能覆盖整个串(可以重叠). 分析 首先这个串肯定是前缀也肯定是后缀. 题解 对串kmp后,建立\(fai ...

  3. 【BZOJ】1532: [POI2005]Kos-Dicing

    题意 \(n\)个人\(m\)场比赛\((1 \le n \le 10000, 0 \le m \le 10000)\),给出每场比赛的两个选手,求赢得最多的人最少赢的场数. 分析 二分最多人赢的场数 ...

  4. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  5. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  6. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  7. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  8. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  9. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

随机推荐

  1. erlang中检查内存泄露

    最近项目内存占用过多,检查一下erlang的内存使用情况. 1. 通过etop可以很方便得出erlang内存使用的情况 spawn(fun() -> etop:start([{output, t ...

  2. 删除多余的自编译的内核、mysql连接不了的问题

    1.删除多余的自编译的内核 每次Debian发布内核更新,总是有某些内核选项跟自己的硬件不配套,要自己编译内核.编译多了,多余的内核就占用了多余的硬盘空间.我就试过因为/boot分区满了,而导致编译内 ...

  3. MAVEN项目标准目录结构 ;

    http://blog.csdn.net/lengyue_wy/article/details/6718637 版权声明:本文为博主原创文章,未经博主允许不得转载.    1.标准目录结构: src ...

  4. 对mysql联合索引中的字段进行合理排序

    在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度: 但是对联合索引中字段顺序的合理排序,便更能提高速度 例子:select * ...

  5. webgl example1

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  6. PHP伪类型和伪变量

    一.伪类型 PHP伪类型有三种,分别是:1,mixed混合类型.2,number数字类型.3,callback回调类型. 1,mixed混合类型: mixed说明一个参数可以接受多种不同的类型,但并不 ...

  7. jenkin报错hudson.plugins.git.GitExcept

    清除工作空间 转载请注明博客出处:http://www.cnblogs.com/cjh-notes/

  8. [LeetCode] [LeetCode] Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  9. P2610 [ZJOI2012]旅游

    题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出 ...

  10. PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】

    一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装.其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Bl ...