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

2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 The Heaviest Non-decreasing Subsequence Problem

2017-09-24 19:44 501 查看
痛并快乐着,调了一下午的最长上升子序列,mm,不会树状数组,比完赛后旁边哥们告诉我  ,把一个5拆成5个1就行,gg,日了狗了

ac代码

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#define inf 0x3f3f3f3f
using namespace std;

const int maxn=1e6+10;

int a[2*maxn];
int dp[2*maxn];
int len;

int binary_search(int i){

int left=1,right=len;
int mid;

while(left < right){
mid=left + (right-left)/2;
if(dp[mid] > a[i])
right=mid;
else
left=mid+1;
}

return left;
}

int main(){

int tmp;
int n=1;
while(~scanf("%d",&tmp)){
if(tmp >= 10000){
tmp=tmp-10000;
for(int i=0;i<5;i++){
a[n++]=tmp;
}
}
else if(tmp >=0 && tmp < 10000){
a[n++]=tmp;
}
}
len=1;
dp[1]=a[1];
int flag=0;
for(int i=2;i<n;i++){
flag=1;
if(a[i] >= dp[len]){
dp[++len]=a[i];
}
else{
int pos=lower_bound(dp+1,dp+1+len,a[i])-dp;
while(dp[pos] <= a[i])
pos++;
dp[pos]=a[i];
}
}
if(!flag) printf("0\n");
else printf("%d\n",len);

return 0;
}


还准备树状数组搞一下,试试哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐