道路规划
来源:互联网 发布:linux 查看局域网ip 编辑:程序博客网 时间:2024/05/01 15:27
题目大意
两排点,每个点只跟一条线相连。
选最多的线,使这些线两两相交。
水题
相交就是
倒着枚举来满足第二个条件,然后只要满足第一个条件即可转移。
因为和i’,j’相交的一定和i,j相交。
线段树优化一下DP
#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=100000+10;int a[maxn],id[maxn],f[maxn],tree[maxn*4];int i,j,k,l,t,n,m,ans;int read(){ int x=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return x;}void change(int p,int l,int r,int a,int b){ if (l==r){ tree[p]=b; return; } int mid=(l+r)/2; if (a<=mid) change(p*2,l,mid,a,b);else change(p*2+1,mid+1,r,a,b); tree[p]=max(tree[p*2],tree[p*2+1]);}int query(int p,int l,int r,int a,int b){ if (a>b) return 0; if (l==a&&r==b) return tree[p]; int mid=(l+r)/2; if (b<=mid) return query(p*2,l,mid,a,b); else if (a>mid) return query(p*2+1,mid+1,r,a,b); else return max(query(p*2,l,mid,a,mid),query(p*2+1,mid+1,r,mid+1,b));}int main(){ n=read(); fo(i,1,n){ t=read(); id[t]=i; } fo(i,1,n){ t=read(); a[i]=id[t]; } fd(i,n,1){ f[i]=query(1,1,n,1,a[i]-1)+1; change(1,1,n,a[i],f[i]); } fo(i,1,n) ans=max(ans,f[i]); printf("%d\n",ans);}
0 0
- 道路规划
- 软件测试道路规划
- JZOJ 4810. 道路规划
- 【JZOJ4810】道路规划
- 【JZOJ 4810】道路规划
- 3080 道路规划
- xjoj 道路规划
- 道路游戏 动态规划
- 【xjoi】【二分查找】道路规划
- 软件从业人员如何规划职业发展道路?
- 如何规划职业发展道路(软件业)
- NOIP提高组【JZOJ4810】道路规划
- 【NOIP提高组五校联考】道路规划
- 洛谷 P1070 道路游戏(动态规划)
- 动态规划 洛谷P1070 道路游戏
- 【Luogu1272】重建道路(动态规划)
- 写写从码农到程序员道路的规划
- 道路
- 复习、学习实例
- 基于RC2的私钥加解密源码,内含创建向量键与向量值的方法!
- 挖金矿
- 地图叠加图切片:使用配准点使叠加图片精确匹配到地图
- Python Context Manager
- 道路规划
- Python print线程安全
- 排队
- SQL 之 模糊匹配
- JZOJ 4814 【NOIP2016提高A组五校联考2】tree
- string
- [JZOJ4816]label
- 二叉树的中序非递归遍历c语言版
- running