热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hdu3415MaxSumofMax-K-sub-sequence

1*2*限定长度的循环数据集最大连续子序列和,用队列保存前i个数中小于sum[i]的数。3*4#include<iostream>5#include
 1 /*
 2 *限定长度的循环数据集最大连续子序列和,用队列保存前i个数中小于sum[i]的数。
 3 */
 4 #include 
 5 #include 
 6 using namespace std;
 7 struct min_sum{
 8     int min_index,min_value;
 9     min_sum(){}
10     min_sum(int min_index,int min_value):min_index(min_index),min_value(min_value){}
11 }qv[200010];
12 int num[100010],sum[200010];
13 int main()
14 {
15     int i,n,k,tempx,tempy,tempmin,tempmax,tempsum,T;
16     scanf("%d",&T);
17     while(T--)
18     {
19         scanf("%d%d",&n,&k);
20         sum[0]=0;
21         for(i=1;i<=n;i++)
22         {
23             scanf("%d",&num[i]);
24             sum[i]=sum[i-1]+num[i];
25         }
26         for(i=1;i<=k;i++)
27         {
28             sum[n+i]=sum[n+i-1]+num[i];
29         }
30         tempx=tempy=0;
31         tempsum=-2147483646;
32         tempmin=tempmax=0;
33         qv[tempx++]=min_sum(0,0);
34         for(i=1;i<=n+k;i++)
35         {
36             while(tempyk)
37             {
38                 tempy++;
39             }
40             if(sum[i]-qv[tempy].min_value>tempsum)
41             {
42                 tempsum=sum[i]-qv[tempy].min_value;
43                 tempmin=qv[tempy].min_index+1;
44                 tempmax=i;
45             }
46             while(tempy1].min_value>sum[i])
47             {
48                 tempx--;
49             }
50             qv[tempx++]=min_sum(i,sum[i]);
51         }
52         tempmin-=(tempmin>n?n:0);
53         tempmax-=(tempmax>n?n:0);
54         printf("%d %d %d\n",tempsum,tempmin,tempmax);
55     }
56     return 0;
57 }

 


推荐阅读
author-avatar
Jenny821010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有