博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Heap 3214 LIS题解
阅读量:4310 次
发布时间:2019-06-06

本文共 1189 字,大约阅读时间需要 3 分钟。

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

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

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

由于时间限制是5s.

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int MAX_N = 20;vector
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

你可能感兴趣的文章
linux下载github中的文件
查看>>
HDP Sandbox里面git clone不了数据(HTTP request failed)【目前还没解决,所以hive的练习先暂时搁置了】
查看>>
动态分区最佳实践(一定要注意实践场景)
查看>>
HIVE—索引、分区和分桶的区别
查看>>
Hive进阶总结(听课总结)
查看>>
大数据领域两大最主流集群管理工具Ambari和Cloudera Manger
查看>>
Sqoop往Hive导入数据实战
查看>>
Mysql到HBase的迁移
查看>>
Sqoop import进阶
查看>>
Hive语句是如何转化成MapReduce任务的
查看>>
Hive创建table报错:Permission denied: user=lenovo, access=WRITE, inode="":suh:supergroup:rwxr-xr-x
查看>>
Hive执行job时return code 2排查
查看>>
hive常用函数及数据结构介绍
查看>>
Hive面试题干货(亲自跟着做了好几遍,会了的话对面试大有好处)
查看>>
力扣题解-230. 二叉搜索树中第K小的元素(递归方法,中序遍历解决)
查看>>
力扣题解-123. 买卖股票的最佳时机 III(动态规划)
查看>>
Django 源码阅读:服务启动(wsgi)
查看>>
Django 源码阅读:url解析
查看>>
Docker面试题(一)
查看>>
第一轮面试题
查看>>