题意:

      给你一个数字组成的环,要求在里面找到一个最大的子序列,使得和最大,要求:

(1)子序列长度不能超过k

(2)如果子序列和相同要起点最小的

(3)如果起点相同要长度最小的

思路:

      首先环我们可以把序列放大一倍,然后Ans = maxx(sum[j] - sum[i]);  其中j>i,j-i>=k,sum[i]是前缀和,对于每一个j我们只要找到前面最小的那个sum[i]就行了,这样就变成了一个比较裸的一个单调队列的题目,求最小我们的队列可以使递增的,每次从队尾进,把比当前大的出队(不是大于等于,是大的,这样保证同样和的时候前缀最小),队头的话只要把距离当前值距离大于k的出队就行了,还有就是记住一点,每次都是先询问在进队,那么在询问之前一定要判断下队头的id是否过期,也就是队头是否要出先队列,这个地方大一了wa了一发。 

#include<stdio.h>

#include<string.h>

#define N 200000 + 10

typedef struct

{

   int id ,num;

}NODE;

NODE Q[N];

int num[N];

int tou ,wei ,k;

void insert(int id ,int num)

{

   for(int i = wei ;i > tou ;i --)

   if(Q[i].num > num) wei --;

   else break;

   Q[++wei].id = id;

   Q[wei].num = num;

   for(int i = tou + 1 ;i <= wei ;i ++)

   if(id - Q[i].id > k)  tou ++;

   else break;

}

int main ()

{

   int t ,n ,j ,i;

   int Ansa ,Ansb ,Ansc;

   scanf("%d" ,&t);

   while(t--)

   {

      scanf("%d %d" ,&n ,&k);

      for(i = 1 ;i <= n ;i ++)

      {

         scanf("%d" ,&num[i]);

         num[i+n] = num[i];

      }

      Ansc = - 1000000000;

      tou = wei = 0;

      int sum = 0;

      Q[++wei].num = 0;

      Q[wei].id = 0;

      num[0] = 0;

      for(i = 1 ;i <= n + n ;i ++)

      {

         sum += num[i]; 

         while(i - Q[tou+1].id > k)

         tou ++;  

         int now = sum - Q[tou+1].num;

         if(now > Ansc)

         Ansc = now ,Ansa = Q[tou+1].id + 1,Ansb = i;   

         insert(i ,sum);

      }

      if(Ansb > n) Ansb -= n;

      printf("%d %d %d\n" ,Ansc ,Ansa ,Ansb);

   }

   return 0;

}

      

      

      

   

   

   

   

      

   

hdu3415单调队列的更多相关文章

  1. hdu3415 单调队列模板题

    比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring&g ...

  2. hdu3415 单调队列

    Max Sum of Max-K-sub-sequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  3. hdu3415 Max Sum of Max-K-sub-sequence 单调队列

    //hdu3415 Max Sum of Max-K-sub-sequence //单调队列 //首先想到了预处理出前缀和利用s[i] - s[j]表示(j,i]段的和 //之后的问题就转换成了求一个 ...

  4. poj2823/hdu3415 - 数据结构 单调队列

    poj2823 题目链接 长度为N的数组,求宽度k的滑动窗口在数组上滑动时窗口内的最大值或最小值 如果用单调队列做,求最小值时,队列应该严格递增的.所以插入时,队尾大于等于插入值的元素都应被舍弃,因为 ...

  5. hdu3415:最大k子段和,单调队列

    题目大意:给定长度为n的数组,求出最大的区间和,其中区间长度在[1,k]之间 分析: 学动态规划的时候我们会遇到一个经典问题 最大子段和,这个题跟最大子段和很类似 不同的是区间的长度有限制,无法用原算 ...

  6. HDU3415:Max Sum of Max-K-sub-sequence(单调队列)

    Problem Description Given a circle sequence A[1],A[2],A[3]......A[n]. Circle sequence means the left ...

  7. hdu3415(单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3415 题意:一个长度为n包含正负整数的数环,即第1个的左边是第n个.从中选一个不超过k的序列,使得序列 ...

  8. HDU3415【单调队列】

    单调队列解决通过维护满足条件内的值,并保证队列里的值单调,解决一个最大最小. 让你求一个k区间长度的最大值,那么就只要搞下前缀和, sum[ i , j ] 区间的和:sum[ j ]-sum[ i ...

  9. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

随机推荐

  1. PowerShell的使用

                一:基于winserver2008版本powershell2.0的升级(至4.0) (1)首先:查看各版本的Powershell版本,如下所示: (2)打开虚拟机winserv ...

  2. FreeBSD 如何让csh像zsh那样具有命令错误修正呢

    比如,,你用 emacs写c ,但你输完emacs ma按tab回车是,他会匹配所有ma开头的文件,而这个是忽略掉,也就是按tab时不会在有你忽略的东西,对编程之类的友好,不用再匹配到二进制..o之类 ...

  3. 001-HashMap源码分析

    HashMap源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如 memcached)的核心其实就是在内存中维护一张大的哈希表. 一.什 ...

  4. P1092 虫食算 题解(搜索)

    题目链接 P1092 虫食算 解题思路 好题啊!这个搜索好难写...... 大概是要考虑进位和考虑使用过某个数字这两个东西,但就很容易出错...... 首先这个从后往前搜比较好想,按照从后往前出现的顺 ...

  5. Python读写配置文件模块--Configobj

    一.介绍 我们在项目的开发过程中应该会遇到这样的问题:我们的项目读取某个配置文件,然后才能按照配置的信息正常运行服务,当我们需要对修改服务的某些信息时,可以直接修改这个配置文件,重启服务即可,不用再去 ...

  6. 微信小程序Animation动画的使用

    目录 1,前言 2,属性 3,使用 1,前言 和css3动画不同,小程序中动画是主要是通过js控制的,简单来说就是创建一个动画实例animation.调用实例的方法来定义动画效果.最后通过动画实例的e ...

  7. python网络编程-TCP服务端的开发

    #TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何一个ip地址 ...

  8. springboot+druid报错log4j:WARN No appenders could be found for logger (druid.sql.Connection). log4j:WARN Please initialize the log4j system properly.

     解决方案:新建文件log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.Con ...

  9. Linux 服务器性能测试报告-sysbench命令实践

    Linux 服务器性能测试报告 我们使用linux 工具sysbench 来测试linux服务器性能,目前在Centos上进行操作 Install sysbench yum -y install sy ...

  10. [BFS]P1434 [SHOI2002]滑雪

    P1434 [SHOI2002]滑雪 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者 ...