zoukankan      html  css  js  c++  java
  • 线段树优化DP [Poi2010]Monotonicity 2

    问题 B: [Poi2010]Monotonicity 2

    时间限制: 1 Sec  内存限制: 256 MB
    提交: 57  解决: 40
    [提交][状态][讨论版]

    题目描述

    给出N个正整数a[1..N],再给出K个关系符号(>、<或=)s[1..k]。
    选出一个长度为L的子序列(不要求连续),要求这个子序列的第i项和第i+1项的的大小关系为s[(i-1)mod K+1]。
    求出L的最大值。

    输入

    第一行两个正整数,分别表示N和K (N, K <= 500,000)。
    第二行给出N个正整数,第i个正整数表示a[i] (a[i] <= 10^6)。
    第三行给出K个空格隔开关系符号(>、<或=),第i个表示s[i]。

    输出

    一个正整数,表示L的最大值。

    样例输入

    7 3
    2 4 3 1 3 5 3
    < > =
    
    

    样例输出

    6
    
    
    

    提示

    选出的子序列为2 4 3 3 5 3,相邻大小关系分别是< > = < >。

             f[i]表示到i位最大子序列长度。转移由之前某一个满足的条件转移(由f[j]的大小判断匹配到第几个条件)
            当然上面的都只是暴力。。
            转移可分别由<,>,=转移得到,只来自之前,所以可以用线段树维护区间最大值。以此节点的权值作为线段树的下标,f[i]为值,并根据f[i]的大小考虑该推进<,>的线段树中(共两棵,得分别维护)查询时只要查询比a[i](大/小)的区间就行了。
            关于等于号,不用再开线段树,只要记录上一个相等且该取=的大小就行了。
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define N 500000
    using namespace std;
    int n,m,a[N+5],f[N+5],b[N+5];
    char s[5];
    int read()
    {
        int sum=0,f=1;char x=getchar();
        while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
        while(x>='0'&&x<='9')sum=sum*10+x-'0',x=getchar();
        return sum*f;
    }
    int main()
    {
        //freopen("mot.in","r",stdin);
        //freopen("mot.out","w",stdout);
        n=read();m=read();
        for(int i=1;i<=n;i++)
            a[i]=read();
        for(int i=1;i<=m;i++)
        {
            scanf("%s",s);
            if(s[0]=='<')b[i]=0;
            if(s[0]=='>')b[i]=1;
            if(s[0]=='=')b[i]=2;
        }
        f[1]=1;
        for(int i=1;i<=n;i++)
           for(int j=1;j<i;j++)
           {
               int k=f[j]%m;
               if(b[k]==0&&a[j]<a[i])f[i]=max(f[i],f[j]+1);
               if(b[k]==1&&a[j]>a[i])f[i]=max(f[i],f[j]+1);
               if(b[k]==2&&a[j]==a[i])f[i]=max(f[i],f[j]+1);
           }
        //cout<<sum;  
    }


             
  • 相关阅读:
    Sql 复习(1)
    记录一次git issue
    JWT自校验框架
    分布式事务分布式锁的常用解决方式
    SpringBoot开发文档
    SpringCloud的使用以及五大核心组件
    SpringMVC
    关于开发中使用AOP的坑
    SpringCloud使用feign远程调用服务注入映射接口失败问题
    springBoot使用Restful跳转路径回显异常问题
  • 原文地址:https://www.cnblogs.com/QTY2001/p/7632771.html
Copyright © 2011-2022 走看看