2016 Multi-University Training Contest 4 1010 The All-purpose Zero(变形LIS)
2016-09-08 15:59
288 查看
题意
给一个序列,其中的0可以变为任意数,求这个序列能构成的最长上升子序列长度思路
我当时想法有点怪,把他全部转化成了负数再到过来求,原理上并没有什么差别使用最长上升子序列的nlog(n)的算法,当下一个数为0时,直接将记录所有长度结尾数字的数组全部右移并把数字加一,再把1置为无穷小,继续即可,注意要处理一开始就都是0,和全为0的情况。代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5+10; int n; int iOrd[maxn]; int iEle[maxn]; int iLis (){ //初始化数组 for (int i = 0; i <= n; i ++) iOrd[i] = 1e9+7; //记录序列长度 int LEN = 0; for (int i = 0 ; i < n; i ++){ if(iEle[i] == 0) { LEN++; for(int i = LEN ; i >=2; i --){ iOrd[i] = iOrd[i-1]+1; } iOrd[1] = -1*(1e9); } else{ int temp = lower_bound(iOrd+1,iOrd+LEN+1,iEle[i])-iOrd; if (LEN < temp) LEN = temp; iOrd[temp] = iEle[i]; } } return LEN; } int main(){ int T,kas=1; scanf("%d", &T); while(T --){ scanf( 979a "%d",&n); memset(iEle,0, sizeof iEle); for(int i = n-1 ; i >= 0 ; i --){ scanf("%d", iEle + i); iEle[i] *= -1; } if(!iEle[0]){ iEle[0] = -1*(1e9); int k = 0; while(iEle[k] == 0 && k < n ) k++; for(int i = 1 ; i < k ; i ++) iEle[i-1] = iEle[i]+1; } int ans = iLis(); printf("Case #%d: %d\n",kas++,ans); } return 0; }
相关文章推荐
- 最长递增子序列 ( LIS )——The All-purpose Zero ( HDU 5773 ) ( 2016 Multi-University Training Contest 4 1010 )
- 2016 Multi-University Training Contest 4 1010 The All-purpose Zero
- hdu 5773 2016 Multi-University Training Contest 4(LIS变形)
- 2016 Multi-University Training Contest 7 1010 Joint Stacks (模拟)
- 2016 Multi-University Training Contest 3 1010 Rower Bo
- 数据结构 ( 优先队列&&栈 )——HDU 5818 ( 2016 Multi-University Training Contest 7 1010 )
- 2016 Multi-University Training Contest 3 1010 Teacher Bo(数学)
- hdu 5732 subway(2016 Multi-University Training Contest 1 1010)
- HDU5724 Chess 阶梯博弈变形 2016 Multi-University Training Contest 1
- 贪心——Windows10 ( HDU 5802 ) ( 2016 Multi-University Training Contest 6 1010 )
- 2016 Multi-University Training Contest 3 1003 Life Winner Bo
- 2016 Multi-University Training Contest 3
- 【HDU5734 2016 Multi-University Training Contest 2A】【公式代入推导】Acperience n维向量各有加减最小模长
- 2016 Multi-University Training Contest 4(2016多校训练第四场)1011
- HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)
- 树状数组 ( 求逆序数 )——Bubble Sort ( HDU 5775 ) ( 2016 Multi-University Training Contest 4 1012 )
- 2016 Multi-University Training Contest 4 T9
- 2016 Multi-University Training Contest 5
- (HDU 5793)2016 Multi-University Training Contest 6 A Boring Question (规律)
- 2016 Multi-University Training Contest 1 总结