NEERC2014 Problem I. Improvements

来源:互联网 发布:php时时彩架设教程 编辑:程序博客网 时间:2024/06/03 05:23

题目链接:http://codeforces.com/gym/100553

考场上想不到。。。

我们知道

(此时是按照xi排好顺序的序号i序列,也就是飞船排列实际情况)这种情况的时候是最好的,线段都是包含关系,不会是交叉关系。

想到这道题是求最多不动的飞船的个数,于是只要有断断续续的形成这样的图就行了,其他中间不符合规则的点反正是任意飞,一定能找到一个地方合理安置,不破坏那些不动的点的相对关系(其实就插入原来从小到大位置的地方就行了,也就是上图这些线的内部,反正就是不用管了)。

最后我们发现转圈圈的图有这样的性质,一定是先递增后递减的,而且递增和递减长度,和对称位置的飞船序号大小都是无所谓的,比如

1 3 4 5 2这个序列,连线从1到2 再回左边递增序列的3再到4,最后到5。

这样就转化为了一个峰值两边最长下降之和的最大值问题,正反一遍LIS树状数组解决就好了。

#include<cstdio>#include<cstring>#define maxl 200010int n,ans;int a[maxl],b[maxl],l[maxl],r[maxl];inline int read(){int x=0;char ch=getchar();while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x;}inline int max(int a,int b){if(a>b)return a;elsereturn b;}void prework(){int d;for(int i=1;i<=n;i++){d=read();a[d]=i;}}int getmax(int i){int s=0;while(i){s=max(s,b[i]);i-=i&-i;}return s;}void update(int i,int x){while(i<=n){b[i]=max(b[i],x);i+=i&-i;}}void mainwork(){ans=0;memset(b,0,sizeof(b));for(int i=1;i<=n;i++){l[i]=getmax(a[i]-1)+1;update(a[i],l[i]);}memset(b,0,sizeof(b));for(int i=n;i>=1;i--){r[i]=getmax(a[i]-1)+1;update(a[i],r[i]);ans=max(ans,l[i]+r[i]-1);}}void print(){printf("%d\n",ans);}int main(){freopen("improvements.in","r",stdin);freopen("improvements.out","w",stdout);while(~scanf("%d",&n)){prework();mainwork();print();}return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度云有转存任务正在进行怎么办 港版索尼手机的浏览器怎么办 手机下载文件不能直接打开怎么办 上传到电脑视频打不开了怎么办 百度云播放很卡怎么办 百度云视频很卡怎么办 考虫课程过期了怎么办 私教课程过期了怎么办 在异地交的社保怎么办 1岁宝宝吃粉笔怎么办 宝宝吃了彩色笔怎么办 宝宝吃了彩笔水怎么办 熹妃q传忘记密码怎么办 云课堂2忘记密码怎么办 云课堂密码忘了怎么办 小米云存储空间已经满怎么办 苹果手机云备份空间不足怎么办 办信用卡不知道公司电话怎么办 办信用卡不知道单位电话怎么办 朋友沉迷网络游戏怎么办英文作文 平板的密码忘了怎么办 白泥面膜过期了怎么办 小米手机桌面短信图标不见了怎么办 亚马逊账号注册扣款不成功怎么办 流量卡不用了怎么办啊 移动卡不想要了怎么办 b站调用速度过快怎么办 苹果系统占用19g怎么办 id被锁定了忘记密码怎么办 360儿童卫士忘记密码怎么办 微信注册忘记密码怎么办 旅行青蛙换手机iphone怎么办 网页邮箱添加不了附件怎么办 pos机密码忘了怎么办 在4楼上课地震了怎么办 微鲸电视待机打不开怎么办 苹果手机微信听不到语音怎么办 电信怎么办腾讯频看电视不要流量 孩子做事效率低怎么办教案 孩子做事效率低怎么办读后感 做事效率低总是焦虑怎么办