一道杨氏矩阵的题,萌新初入门,还不是很懂,这篇 blog 讲的超级好(就是看图有点麻烦)

据说这玩意儿可以代替堆和平衡树用,支持插入、删除、查询,跑得还挺快的(慢着,复杂度好像是 n^2 ? 而且空间要求爆炸!)

emmm 总之就是跑不满的吧,反正做这道题 n^2 也是正解了啊...

我们考虑杨氏矩阵是一个满足任意元素的右方和下方相邻元素都比该元素小(或大)的矩阵,空着的元素可以默认为 inf

这个性质有点像堆...不过正是这个性质使得杨氏矩阵可以解决一些特殊的问题,比如这道题

我们考虑单单去求一个最长不降子序列的长度,那么最快办法就是去二分优化 dp 转移了

这里的杨氏矩阵的做法极其类似,不信的话你甚至可以把第一行的最终元素输出来看看,和自己打的最长不降子序列比对一下,你就会发现两者相同...

  1. //by Judge
  2. #include<cstdio>
  3. #include<iostream>
  4. #define Rg register
  5. #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
  6. #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
  7. using namespace std;
  8. const int M=5005;
  9. #ifndef Judge
  10. #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  11. #endif
  12. char buf[1<<21],*p1=buf,*p2=buf;
  13. inline bool cmin(int& a,int b){return a>b?a=b,1:0;}
  14. inline int read(){ int x=0,f=1; char c=getchar();
  15. for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
  16. for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
  17. } char sr[1<<21],z[20];int CCF=-1,Z;
  18. inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
  19. inline void print(int x,char chr='\n'){
  20. if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;
  21. while(z[++Z]=x%10+48,x/=10);
  22. while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
  23. } int n,x,ans;
  24. struct Matrix{ int a[M][M];
  25. int* operator [](const int& x){return a[x];}
  26. inline void insert(Rg int x,Rg int y,Rg int v){
  27. cmin(y,*a[x]); while(y&&a[x][y]>v) --y; ++y;
  28. if(y>*a[x]) a[x][++*a[x]]=v; else insert(x+1,y,a[x][y]),a[x][y]=v;
  29. }
  30. }p;
  31. int main(){ n=read(); fp(i,1,n) x=read(),p.insert(1,n,x);
  32. fp(i,1,n) if(!p[i][0]) break; else print(ans+=p[i][0]); return Ot(),0;
  33. }

bzoj 1175: The stairways of Saharna的更多相关文章

  1. 【九度OJ】题目1175:打牌 解题报告

    [九度OJ]题目1175:打牌 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1175 题目描述: 牌只有1到9,手里拿着已经排好序的 ...

  2. hihoCoder 1175:拓扑排序二

    题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头 ...

  3. BZOJ 4326:NOIP2015 运输计划(二分+差分+lca)

    NOIP2015 运输计划Description公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所 ...

  4. BZOJ 1192:[HNOI2006]鬼谷子的钱袋(数学)

    鬼谷子的钱袋Description鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会 ...

  5. 九度OJ 1175:打牌 (模式匹配)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8156 解决:1560 题目描述: 牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌.  规则:出牌 ...

  6. HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3879 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 ...

  7. BZOJ1175 : [Balkan2007]The stairways of Saharna

    杨氏图表,维护若干个单调不下降队列. 每次新加入一个数时,先考虑第一个队列: 如果可以放在最后,则放在最后. 否则找到最小的可以替换的替换掉,再将替换的数放入第二个队列,以此类推. 最后$ans_i= ...

  8. BZOJ 1588:营业额统计(Splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1588 题意:中文题意. 思路:每一个点每一个点插入Splay,然后插入新的一个点之后,查这个节点的前 ...

  9. BZOJ 1036:树的统计Count(树链剖分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:中文题意. 思路:也是普通的树链剖分.唯一注意的点是在change函数中 while(t ...

随机推荐

  1. layui(三)——laypage组件常见用法总结

    laypage 的使用非常简单,指向一个用于存放分页的容器,通过服务端得到一些初始值,即可完成分页渲染.核心方法: laypage.render(options)  来设置基础参数. 一.laypag ...

  2. IDEA之debug的坑

    IDEA是一款火热的开发工具.debug谁都会,很简单?NO 一次不正常的关机,导致第二条上班debug失效,浪费两个小时.特做此记录. 1.如下图点击View Breakpoints进入可以到你设置 ...

  3. Problems found loading plugins: Plugin "GlassFish Integration" was not loaded: required plugin "Java EE: EJB, JPA, Servlets" is disabled.

    idea启动报错:并且无法部署web项目 Problems found loading plugins: Plugin "GlassFish Integration" was no ...

  4. FeignClient调用POST请求时查询参数被丢失的情况分析与处理

    前言 本文没有详细介绍 FeignClient 的知识点,网上有很多优秀的文章介绍了 FeignCient 的知识点,在这里本人就不重复了,只是专注在这个问题点上. 查询参数丢失场景 业务描述: 业务 ...

  5. python--numpy、pandas

    numpy 与 pandas 都是用来对数据进行处理的模块, 前者以array 为主体,后者以 DataFrame 为主体(让我想起了Spark的DataFrame 或RDD) 有说 pandas 是 ...

  6. Django之名称空间

    由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回. project/urls.py urlpatterns = [ path('a ...

  7. JAVA 线程池之Callable返回结果

    本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...

  8. sublime test3 乱码问题的解决

    1.下载ConvertToUTF8插件,地址:http://pan.baidu.com/s/1bnvVd2R 2.按Ctrl+Shift+P打开命令行,输入Install Package,回车,然后继 ...

  9. springboot08-jpa-mysql

    1.主要pom依赖: <!--jpa--> <dependency> <groupId>org.springframework.boot</groupId&g ...

  10. JS算法练习二

    JS算法练习 1.生成4位的随机验证码,可取大小写字母和数字 ? var validateCode = "", /*--存放生成好的验证码字符串--*/ count = 0; /* ...