依据问题转换成最长不降子序列问题。

10^9的输入数据计算起来还是挺花时间的。由于这里仅仅能使用O(nlgn)时间复杂度了。

只是证明是能够算出10^9个数据的。

由于时间限制是5s.

#include <stdio.h>
#include <vector>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <limits.h>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;const int MAX_N = 20;
vector<int> arr, a2;
int N;inline int lSon(int rt) { return rt<<1|1; }
inline int rSon(int rt) { return (rt<<1)+2; }void postOrder(int rt, int &v)
{int l = lSon(rt), r = rSon(rt);if (l < N) postOrder(l, v);if (r < N) postOrder(r, ++v);a2.push_back(arr[rt]-v);
}int biGetIndex(int low, int up, int v)
{while (low <= up){int mid = low + ((up-low)>>1);if (v < a2[mid]) up = mid-1;else low = mid+1;}return low;
}int LIS()
{int j = 0;for (int i = 1; i < N; i++){if (a2[i] >= a2[j]) a2[++j] = a2[i];else{int id = biGetIndex(0, j, a2[i]);a2[id] = a2[i];}}return j+1;
}int main()
{int a;scanf("%d", &N);arr.clear(), a2.clear();while (scanf("%d", &a) != EOF){arr.push_back(a);}N = (int) arr.size();int v = 0;postOrder(0, v);int len = LIS();printf("%d\n", N-len);return 0;
}

转载于:https://www.cnblogs.com/lytwajue/p/6758611.html

Heap 3214 LIS题解相关推荐

  1. Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心)

    Codeforces Round #620 (Div. 2)(D. Shortest and Longest LIS)(O(n log n)的最长上升子序列或者贪心) time limit per t ...

  2. 5.18 优先队列(堆) 滑动窗口(二) 交换链表的节点

    295. 数据流的中位数 最简单的思路暴力法,每次读入数据都进行排序 但是中位数只对中间的一个或两个数据感兴趣,其他数没有必要进行交换或者比较 https://leetcode-cn.com/prob ...

  3. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  4. PAT甲级1098 Insertion or Heap Sort:[C++题解]堆排序和插入排序

    文章目录 题目分析 题目链接 题目分析 分析 插入排序的特点:前半部分有序,后半部分保持原序. 堆排序的特点: 后半部分有序,前半部分无序. 本题的bug在于,答案是唯一的,即不是插入排序就是堆排序, ...

  5. Leetcode1713. 得到子序列的最少操作次数[C++题解]:LCS转化成LIS,转化为nlogn做法

    文章目录 本题分析 题目链接 本题分析 本题难在问题转换上. [问题转化1]转化为求两个序列最长公共子序列(LCS)的长度. 然后target 的长度减去 公共子序列的长度,就是答案. 本题数据规模是 ...

  6. 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解

    小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...

  7. NCD 2019题解C. Hasan and his lazy students【dp求lis,顺序维护方案数】

    题目链接 题意,给序列,求最长上升子序列长度和方案数. n<=1000,因为n小于1e3,所以可以使用复杂度为n2的dp做法,然后使用一个结构体来维护方案数就行了: 先定义一个结构体,包含dp求 ...

  8. 【PAT甲级 - C++题解】1155 Heap Paths

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  9. 【题解】CF538F:A Heap of Heaps

    原题传送门 按照权值从小到大排序 找的是儿子中小于自己的有几个,这样我们就顺着枚举,满足权值递增,用树状数组维护个数,对于一个xxx,kkk叉树,儿子区间为[xk+1−k,xk+1][xk+1-k,x ...

最新文章

  1. 大型银行数据中心用户安全管理
  2. 介绍4种HTML5 Canvas库
  3. 由String.equals()方法引起的一系列思考
  4. 3.通道 Channel
  5. hdu 1078 FatMouse and Cheese(记忆化搜索)
  6. html参数转义字符,Html转义字符 获得请求参数
  7. PDF电子书制作详细教程
  8. 嵌入式系统、嵌入式设计软件概述
  9. java id 锁_java 多线程synchronized同步锁锁住相同用户Id
  10. java设计计算器_Java复数计算器的设计
  11. H5微信授权登录 H5支付 外部浏览器微信支付 前端一个函数搞
  12. 超级计算机燕 排名,第一卷 六年之前 HK171 舍弃的超级计算机燕? (485加更)
  13. JavaScript 基础(002_Event Bubbling)
  14. 红帽linux7.2安装教程,RHEL 6.2安装(超级详细图解教程) | 系统运维
  15. unity里移动鼠标控制物体的移动(2D)
  16. python发微信提醒天气_基于Python实现定时自动给微信好友发送天气预报
  17. 中国大学慕课公开课-《视听语言》-学习笔记-2
  18. 2021SC@SDUSC-SDUDOC-blog00
  19. 如何使用UE去除复制文本中的空格、换行符和TAB
  20. 《量化投资与对冲基金入门》--量化投资--读书笔记(36)

热门文章

  1. Bitmap recycle()
  2. 栈(顺序存储)C++模板实现
  3. element-ui表单验证:用户名、密码、电话、邮箱
  4. canvas画出简陋版随鼠标转动眼睛且会眨眼的可爱樱桃小丸子
  5. Java常量池理解与总结
  6. 12.4日团队工作总结
  7. EIGRP非等价负载均衡
  8. 深入理解Elasticsearch(原书第2版)》一1.2 何为Elasticsearch
  9. 菜鸟超级进口大仓618首度亮相!跨境商品也能当日次日达
  10. 《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》——02-04项目范围(Scope)管理...