博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5773 The All-purpose Zero
阅读量:6884 次
发布时间:2019-06-27

本文共 1783 字,大约阅读时间需要 5 分钟。

这题想了1个多小时想不出来...方法真是精妙...

官方题解:0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可以把0拿出来,对剩下 的做O(nlogn)的LIS,统计结果的时候再算上0的数量。为了保证严格递增,我们可以将每个权值S[i]减去i前面0的个 数,再做LIS,就能保证结果是严格递增的。

#pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const double pi=acos(-1.0),eps=1e-8;void File(){ freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout);}inline int read(){ char c = getchar(); while(!isdigit(c)) c = getchar(); int x = 0; while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } return x;}const int maxn=100000+10;int T,n,a[maxn],sum[maxn],dp[maxn];int t[80*maxn];void update(int p,int val,int l,int r,int rt){ if(l==r) { t[rt]=max(val,t[rt]); return; } int m=(l+r)/2; if(p<=m) update(p,val,l,m,2*rt); else update(p,val,m+1,r,2*rt+1); t[rt]=max(t[2*rt],t[2*rt+1]);}int get(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) return t[rt]; int m=(l+r)/2,maxL=0,maxR=0; if(L<=m) maxL=get(L,R,l,m,2*rt); if(R>m) maxR=get(L,R,m+1,r,2*rt+1); return max(maxL,maxR);}int main(){ scanf("%d",&T); int cas=1; while(T--) { memset(dp,0,sizeof dp); memset(sum,0,sizeof sum); memset(t,0,sizeof t); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { sum[i]=sum[i-1]; if(a[i]==0) sum[i]++; } for(int i=1;i<=n;i++) { if(a[i]==0) continue; a[i]=a[i]-sum[i]+1000000; if(a[i]!=0) dp[i]=get(0,a[i]-1,0,2000000,1)+1; else dp[i]=1; update(a[i],dp[i],0,2000000,1); } int Max=0; for(int i=1;i<=n;i++) Max=max(Max,dp[i]); printf("Case #%d: %d\n",cas++,Max+sum[n]); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5720995.html

你可能感兴趣的文章
创建windows服务
查看>>
HTML5 入门基础
查看>>
【转载】读懂IL代码就这么简单(二)
查看>>
C++文件操作(fstream)
查看>>
用main函数传参做简单的计算器的代码
查看>>
python中struct.unpack的用法
查看>>
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
剑指offer---12-**--数值的整数次方
查看>>
PAT - L2-010. 排座位(并查集)
查看>>
Linux下chkconfig命令详解(转)
查看>>
EF中,保存实体报错:Validation failed for one or more entities. 如何知道具体错误在哪?...
查看>>
和积式
查看>>
你不能错过.net 并发解决方案
查看>>