zoukankan      html  css  js  c++  java
  • 2019 蓝桥杯省赛 B 组模拟赛(一) 代码填空:LIS (LIS二分写法)

    LIS 是最长上升子序列。什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段最长严格上升的部分,它不一定要连续。

    就像这样:22, 33, 44, 77 和 22, 33, 44, 66 就是序列 22 55 33 4411 77 66 的两个上升子序列,最长的长度是 44。

    题目来源

    2019 蓝桥杯省赛 B 组模拟赛(一)

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 9;
    int f[N], a[N];
    int n;
    int find(int l, int r, int x) {
    	while (l < r) {
    		int mid = (l + r) / 2;
    		if (f[mid] < x) {
    			l = mid + 1;
    		} else {
    			r = mid;
    		}
    	}
    	return l;
    }
    int lis() {
    	int len = 0;
    	for (int i = 0; i < n; i++) {
    		/*在这里填写必要的代码*/int k = find(0,len,a[i]);
    		f[k] = a[i];
    		if (k == len) {
    			len++;
    		}
    	}
    	return len;
    }
    int main() {
    	scanf("%d", &n);
    	for (int i = 0; i < n; i++) {
    		scanf("%d", a + i);
    	}
    	printf("%d
    ", lis());
    	return 0;
    }
  • 相关阅读:
    mysql主从延迟高的原因
    OpenStack云平台网络模式及其工作机制
    maps.reg
    dnion的remap.conf文件
    linux的tar命令
    traffic server文件目录
    records.config文件参数解释
    VNC配置
    KVM详情
    cache.config文件配置模板
  • 原文地址:https://www.cnblogs.com/Romantic-Chopin/p/12451158.html
Copyright © 2011-2022 走看看