您的位置:首页 > 理论基础 > 计算机网络

The Heaviest Non-decreasing Subsequence Problem 最长非递减子序列 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛

2017-09-25 15:00 513 查看
题目链接

根据题意,把值变换成数的个数,这样就变成了求最长非递减子序列,这里用O(n*log(n))的办法

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N =200005;
const int INF =1e9+5;

ll a;
ll v;
ll t;
vector<ll> num;

//LIS O(n*log(n));
int getLISLength( int length)
{
vector<ll> ivec;
ivec.clear();
for(int i = 0; i < length; ++i)
{
if (ivec.size() == 0 || ivec.back() <= num[i])
ivec.push_back(num[i]);
else
{
int low = upper_bound(ivec.begin(),ivec.end(),num[i])-ivec.begin();
ivec[low] =num[i];
}
}
return ivec.size();
}

int main()
{
//    freopen("data.txt","r",stdin);
//    freopen("out.txt","w",stdout);
//    ios_base::sync_with_stdio(false);

num.clear();
while(~scanf("%lld",&t))
{
a = t;
if(t<0)
{
v = 0;
}
else if(t>=10000)
{
v = 5;
a -= 10000;
}
else
{
v = 1;
}
for(int i=0;i<v;i++)
{
num.push_back(a);
}
}
printf("%d\n",getLISLength(num.size()));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐