zoj2451
来源:互联网 发布:网络信息管理岗位职责 编辑:程序博客网 时间:2024/05/20 20:17
题目大意:
有一个排序硬件叫Maximizer。Maximizer通过管道方式完成Sorter(i[1], j[1]), …, Sorter(i[k], j[k])。每个sorter有N个输入和N个输出。Sorter(i,j)不下降排序i,i+1,…j。第N个sorter的输出是Maximizer的输出。
一个intern发现一些sorter可以排除在管道之外并且仍然产生正确的结果。那么问最短的长度是多少?
解题思路:
线段树,找时间研究一下
代码如下:
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#define maxn 200015#define maxm 500005#define maxlongint (1<<30)#define min(a,b) (((a)<(b))?(a):(b))int lch[maxn],rch[maxn],l[maxn],r[maxn],w[maxn];int n,m,tot;int buildtree(int a,int b){int now=++tot;l[now]=a,r[now]=b,w[now]=maxlongint;if(a<b){lch[now]=tot+1,buildtree(a,(a+b)/2);rch[now]=tot+1,buildtree((a+b)/2+1,b);}return 0;}int modify(int t,int p,int f){if(l[t]==r[t])return w[t]=min(f,w[t]),0;if(p<=r[lch[t]])modify(lch[t],p,f);elsemodify(rch[t],p,f);w[t]=min(w[lch[t]],w[rch[t]]);return 0;}int query(int t,int a,int b){if((l[t]>=a)&&(r[t]<=b))return w[t];int tmp1=maxlongint,tmp2=maxlongint;if(r[lch[t]]>=a)tmp1=query(lch[t],a,b);if(l[rch[t]]<=b)tmp2=query(rch[t],a,b);return min(tmp1,tmp2);}int main(){for(;scanf("%d%d",&n,&m)!=EOF;tot=0){buildtree(1,n);modify(1,1,0);for(int a,b;m>0;m--){scanf("%d%d",&a,&b);modify(1,b,query(1,a,b-1)+1);}printf("%d\n",query(1,n,n));}return 0;}
0 0
- zoj2451
- zoj2451-Minimizing maximizer(线段树,超时)
- 仿淘宝,美团等HOT标签控件 (Button,Textview,Imagview,View)
- 字符种类判断
- SpringMVC 注解式拦截器实现
- 关于ubuntu环境变量
- 原生ajax以post方式传值给servlet中的指定方法
- zoj2451
- CentOS6.5之Samba服务器的安装、以及静态IP配置—你—逆袭必备
- 宇宙总统-洛谷 1781
- Cornerstone忽略不必要的文件
- MQ之融会贯通
- 获取activity的根布局
- Git图文教程及详解
- 洛谷1115最大子段和
- BPR [Bayesian Personalized Ranking] 算法详解及应用实践