当前位置: 首页 > news >正文

POJ1631 LIS模板

题目:http://poj.org/problem?id=1631

两种nlogn的方法。

1.树状数组优化暴力。有种扫描线的感觉,以时间保证位置,把值作为数组脚标。

2.记录长为...的上升子序列末尾元素最小值;如果新入元素a比d [ top ]大,就d [ ++top ] = a,否则二分查找第一个d的值大于a的地方,用a更新该d。答案为top。

  二分的边界之类的需注意。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int t,n,a,d,f[40005],ans;
int query(int k)
{
    int ret=0;
    while(k)
    {
        ret=max(ret,f[k]);
        k-=k&-k;
    }
    return ret;
}
void add(int k)
{
    while(k<=n)
    {
        f[k]=max(f[k],d);
        k+=k&-k;
    }
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            d=query(a)+1;
            ans=max(ans,d);
            add(a);
        }
        printf("%d\n",ans);
        ans=0;
        memset(f,0,sizeof f);
    }
    return 0;
}
树状数组
#include<iostream>
#include<cstdio>
using namespace std;
int t,n,a,d[40005],l,r,ret,top;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            if(a>d[top])
            {
                d[++top]=a;continue;
            }
            l=1;r=top;ret=-1;
            while(l<r)////
            {
                int mid=(l+r)/2;
                if(d[mid]>a)ret=mid,r=mid;
                else l=mid+1;
            }
            if(d[l]>a)ret=l;///
            d[ret]=a;
        }
        printf("%d\n",top);
        top=0;
    }
    return 0;
}
二分

 

转载于:https://www.cnblogs.com/Narh/p/8485830.html

相关文章:

  • pyqt5 QGraphicsView颜色动画问题(不兼容,运行不了动画)
  • Java Eclipse和MyEclipse快捷键
  • linux 使用fdisk分区扩容,看介绍命令(未完)
  • 微信小程序—智能小蜜(基于智能语义解析olami开放平台)
  • SCCM 2016 分发.msi 软件
  • cnpm新建vue项目
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • Python_函数
  • POJ 2392 Space Elevator(多重背包,排序)
  • ubuntu17.04中启动tnsorboard过程
  • BZOJ3601 一个人的数论
  • 亚马逊推出FreeTime Android应用程序,开放适合儿童资源
  • SpaceX发射机密间谍卫星,系与美国防部签订的第一单合作
  • 无人机给你送餐了,快来签收!
  • 作为“云计算”的延伸,“雾计算”只是一种炒作吗?
  • (三)从jvm层面了解线程的启动和停止
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Angular 4.x 动态创建组件
  • Brief introduction of how to 'Call, Apply and Bind'
  • CODING 缺陷管理功能正式开始公测
  • GitUp, 你不可错过的秀外慧中的git工具
  • happypack两次报错的问题
  • HomeBrew常规使用教程
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • jquery ajax学习笔记
  • PHP 的 SAPI 是个什么东西
  • SQLServer插入数据
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 彻底搞懂浏览器Event-loop
  • 代理模式
  • 第2章 网络文档
  • 来,膜拜下android roadmap,强大的执行力
  • 老板让我十分钟上手nx-admin
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何利用MongoDB打造TOP榜小程序
  • 入手阿里云新服务器的部署NODE
  • 设计模式 开闭原则
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​iOS安全加固方法及实现
  • #162 (Div. 2)
  • #NOIP 2014# day.2 T2 寻找道路
  • (+4)2.2UML建模图
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (vue)页面文件上传获取:action地址
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)h264中avc和flv数据的解析
  • (转)JAVA中的堆栈
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 分布式技术比较
  • .NET 指南:抽象化实现的基类
  • .NET4.0并行计算技术基础(1)