以下参考自刘汝佳老师代码,使用了stl中的set,set集合不会插入的重复元素

#include<cstdio>
#include<set>
#include<cassert>
using namespace std;const int maxn = 200000 + 5;
int n, a[maxn], f[maxn], g[maxn];struct Candidate {int a, g;Candidate(int a, int g):a(a),g(g) {}bool operator < (const Candidate& rhs) const {return a < rhs.a;}
};set<Candidate> s;int main() {int T;scanf("%d", &T);while(T--) {scanf("%d", &n);for(int i = 0; i < n; i++)scanf("%d", &a[i]);if(n == 1) { printf("1\n"); continue; }// g[i] is the length of longest increasing continuous subsequence ending at ig[0] = 1;for(int i = 1; i < n; i++)if(a[i-1] < a[i]) g[i] = g[i-1] + 1;else g[i] = 1;// f[i] is the length of longest increasing continuous subsequence starting from if[n-1] = 1;for(int i = n-2; i >= 0; i--)if(a[i] < a[i+1]) f[i] = f[i+1] + 1;else f[i] = 1;s.clear();s.insert(Candidate(a[0], g[0]));int ans = 1;for(int i = 1; i < n; i++) {Candidate c(a[i], g[i]);set<Candidate>::iterator it = s.lower_bound(c); // first one that is >= cbool keep = true;if(it != s.begin()) {Candidate last = *(--it); // (--it) points to the largest one that is < cint len = f[i] + last.g; ans = max(ans, len);if(c.g <= last.g) keep = false;}if(keep) {//s.erase(c); // if c.a is already present, the old g must be <= c.gs.insert(c);it = s.find(c); // this is a bit cumbersome and slow but it's clearit++;while(it != s.end() && it->a > c.a && it->g <= c.g) s.erase(it++);}}printf("%d\n", ans);}return 0;
}

紫书 防线 UVa1471相关推荐

  1. UVa 1339,紫书P73,词频

    题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include ...

  2. 11行代码AC——比紫书优化,例题2-3 近似计算——解题报告

    励志用更少的代码做高效的表达 题意: 计算π/4 = 1 - 1/3 + 1/5 - 1/7 + -,直到最后一项小于10^-6. 思路分析: 本题很简单,因此计算重心从解题转化为优化. 本题为重复计 ...

  3. 比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告

    题意: 丑数是一些因子只有2,3,5的数.数列1,2,3,4,5,6,8,9,10,12,15--写出了从小到大的前11个丑数,1属于丑数.现在请你编写程序,找出第1500个丑数是什么. 没有输入 输 ...

  4. 紫书 团队队列(队列)

    1.用两个队列来维护成员,一个队列维护队伍编号,一个队列数组维护每个队伍的成员 ps: 紫书p118 #include <bits/stdc++.h> using namespace st ...

  5. (紫书,感谢作者)第7章暴力求解法

    今天,我们谈一谈紫书上面的内容--暴力求解法 对于一道问题来说,我们是可以借助计算机运算快的特点,将所有可能的情况全部(不一定是全部)列出来,然后去寻找我们想要的答案,这就是暴力求解了,但暴力求解绝对 ...

  6. 【紫书】(UVa12096) The SetStack Computer

    突然转进到第五章的low题目的原因是做到图论了(紫书),然后惊喜的发现第一题就做不出来.那么里面用到了这一题的思想,我们就先解决这题.当然,dp必须继续做下去,这是基本功.断不得. 题意分析 这条题真 ...

  7. ACM入门攻略(紫书入门,不间断更新)

    声明:本文仅供参考,并且假定读者已经可以熟练运用C语言及其相关知识(大神请走开,谢谢配合). 目录:一.ACM入门的相关准备(书籍,OJ,编程语言,常用网站或工具)            二.入门阶段 ...

  8. 【紫书】第一章实验+问题

    紫书第1章实验 实验A1:表达式11111∗1111111111\ast1111111111∗11111的值是多少?改成6个1呢?9个1呢? 以下几个都用有符号整数%d\%d%d输出结果. 表达式11 ...

  9. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. 【Qt】QCamera查询和设置摄像头的分辨率
  2. 分页携带请求参数_一个值得深思的小问题 请求中的参数值为空要不要携带该参数?...
  3. java第二周学习总结
  4. 用hundred造句子_2020朋友圈感恩节祝福语大全:微信感恩节鞠躬的图片文案句子说说[多图]...
  5. 云小课|VMware备份上云学习专列来了,快加入吧~
  6. R语言聚类算法之k均值聚类(K-means)
  7. WINRAR青绿色透明主题皮肤 Vista/win 7下效果极佳
  8. 如何免费下载百度文库文章
  9. 身份证算法15位转换为18位
  10. 2004年考研数学一真题解析pdf
  11. Bugku-网站被黑
  12. 超详版Struts2入门安装教程
  13. 未能成功加载扩展程序_JVM类加载 - 大碗炸酱面
  14. xhEditor用法
  15. 人生最好的作息时间表
  16. 为何个税突然变多了?“税率跳档”了解一下
  17. windows adb usb 找不到设备的解决方法
  18. 关于用鲁大师对显卡性能进行评测时抛出“评测中切换页面”的异常的解决方案。
  19. deepin win10字体_购机指南 | Deepin 初次体验,国产OS还有很长路要走
  20. 面向对象编程三种特性

热门文章

  1. mysql 子查询 排序_MySQL的子查询中排序
  2. 浏览器首页被劫持为http://hao.169x.cn/的修复方法
  3. 神经网络从被人忽悠到忽悠人(二)
  4. 阿里云服务器上利用IIS部署.net网站(windows server2012r2系统)
  5. java字符串abcde_关于字符串的实验(abc和abcde的起始地址是否一样?)
  6. html 账号只显示前3位,只知道手机号码前三位还有名字能查到全部号码 – 手机爱问...
  7. Django开发模式与流程
  8. 实数系的基本定理_人教版初中数学七年级下册无理数、实数概念 公开课优质课课件教案视频...
  9. 内存、外存、硬盘、CPU、GPU、BIOS的理解
  10. apache winnt_accept: Asynchronous AcceptEx failed 导致时常卡住解决办法