计蒜客 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L题
来源:互联网 发布:淘宝与客服聊天图片 编辑:程序博客网 时间:2024/05/22 06:19
Let S be a sequence of integers s1, s2, ..., sn Each integer is is associated with a weight by the following rules:
(1) If is is negative, then its weight is 0.
(2) If is is greater than or equal to 10000, then its weight is 5. Furthermore, the real integer value of si is si−10000 . For example, if si is 10101, then is is reset to 101 and its weight is 5.
(3) Otherwise, its weight is 1.
A non-decreasing subsequence of S is a subsequence si1, si2, ..., sik, with i1<i2 ... <ik, such that, for all 1≤j<k, we have sij<sij+1.
A heaviest non-decreasing subsequence of S is a non-decreasing subsequence with the maximum sum of weights.
Write a program that reads a sequence of integers, and outputs the weight of its
heaviest non-decreasing subsequence. For example, given the following sequence:
80 75 73 93 73 73 10101 97 −1 −1 114 −1 10113 118
The heaviest non-decreasing subsequence of the sequence is <73,73,73,101,113,118> with the total weight being 1+1+1+5+5+1=14. Therefore, your program should output 14 in this example.
We guarantee that the length of the sequence does not exceed 2∗105
Input Format
A list of integers separated by blanks:s1, s2,...,sn
Output Format
A positive integer that is the weight of the heaviest non-decreasing subsequence.
样例输入
80 75 73 93 73 73 10101 97 -1 -1 114 -1 10113 118
样例输出
14
题目来源
2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
题意:就是给你一串数字,以输入结束符结束输入,然后在这些数字中,小于零的数字权值为 0,大于等于10000的数字的权值为 5,而且这些数字要减去10000,其余数字的权值为 1 。
题解:这题有点坑,比赛时我就没做到,其实大于10000的数字的权值为 5,可不可以就等于5个权值为1的数字呢。然后这道题就变成时间为nlog(n)的最长上升子序列了。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long LL;
///o(っ。Д。)っ AC万岁!!!!!!!!!!!!!!
const int maxn = 15520200;
int maps[maxn] = {}, dp[maxn] = {};
int bin_searchs(int l, int r, int k)
{
if(l >= r)
{
return l;
}
int mid = (l + r + 1) / 2;
if(dp[mid] > k)
{
return bin_searchs(l, mid - 1, k);
}
else return bin_searchs(mid, r, k);
}
int main()
{
int cnt = 0, book;
while(scanf("%d", &book) != EOF)
{
if(book >= 10000)
{
book -= 10000;
for(int i = 1; i <= 5; i++)
{
maps[++cnt] = book;
}
}
else if(book < 0)
{
continue;
}
else maps[++cnt] = book;
}
int counter = 1;
dp[1] = maps[1];
for(int i = 2; i <= cnt; i++)
{
if(maps[i] >= dp[counter])
{
dp[++counter] = maps[i];
}
else
{
int kk = bin_searchs(1, counter, maps[i]);
if(dp[kk] <= maps[i])
{
kk++;
}
dp[kk] = maps[i];
if(kk > counter) counter++;
}
}
printf("%d\n", counter);
return 0;
}
/*
*/
- 计蒜客 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L题
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L题 非递减权值最大
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L. The Heaviest Non-decreasing Subsequence Problem (LIS)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛-L. The Heaviest Non-decreasing Subsequence Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L. The Heaviest Non-decreasing Subsequence Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛:L. The Heaviest Non-decreasing Subsequence Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L. The Heaviest Non-decreasing Subsequence Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L.The Heaviest Non-decreasing Subsequence Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 A. Weather Patterns(阅读题)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B题 离散化+贪心
- Auction Bidding 2017ACM-ICPC亚洲区(南宁赛区)网络赛C题
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M题
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F题
- ACM 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation
- 编写自定义特性
- POJ 3281 Dining(巧妙转化为最大流)
- Python的字符串方法一览
- 小数的四舍五入实现
- Kaggle比赛知识简要
- 计蒜客 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L题
- sudo apt-get install winbind
- 【openCV入门笔记1】跟着浅墨博主入门时发生的错误解决办法
- [luogu2115][USACO14MAR]破坏Sabotage(二分)
- loadrunner Web_类函数之web_sjis_to_euc_param()
- SAS Notes---2017/9/26
- 行为型模式
- 【PHP】static静态变量,静态方法
- 2017.9.26 于神之怒加强版 失败总结