zoukankan      html  css  js  c++  java
  • HDU 3415 Max Sum of MaxKsubsequence

    很裸的一道单调队列题(把数列扩大一倍即可),但是要注意题目的比较条件(定义比较函数),不然会WA
     
     
    代码:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;

    const int N=100010;
    typedef pair<int,int> PII;

    int T,n,k;
    int a[N<<1],dp[N<<1];
    PII que[N<<1];
    int st,ed;
    int ans,p1,p2;



    bool cmp(const PII &a,const PII &b) {
        if(a.first!=b.first) return a.first<b.first;
        return a.second>b.second;
    }


    void push(int x,int p) {
        que[ed++]=PII(x,p);
        while(ed-st>=2 && cmp(que[ed-2],que[ed-1])) que[ed-2]=que[ed-1],ed--;
    }


    int getdec(int cur) {
        if(cur-k<0) return 0;
        else return a[cur-k];
    }

    __inline int readInt() {
        char ch=getchar();
        int ret=0,s=1;
        while(ch!='-' && (ch<'0'||ch>'9')) ch=getchar();
        if(ch=='-') s=-1,ch=getchar();
        while(ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
        return ret*s;
    }

    int main() {
        scanf("%d",&T);
        while(T--) {
            scanf("%d%d",&n,&k);
            for(int i=0;i<n;i++) a[i]=readInt();
            for(int i=n;i<n+k-1;i++) a[i]=a[i-n];
            for(int i=1;i<n+k-1;i++) a[i]+=a[i-1];
            st=ed=0;
            ans=a[0],p1=p2=0;
            for(int i=0;i<n+k-1;i++) {
                while(ed-st>=1 && que[st].second<=i-k) st++;
                push(a[i],i);
                int tans=que[st].first-getdec(i);
                if(tans>ans){
                    ans=tans;
                    int sta=i>=k?i-k+1:0;
                    int end=que[st].second;
                    p1=sta;p2=end;
                }
            }
            printf("%d %d %d\n",ans,p1%n+1,p2%n+1);
        }
        return 0;
    }
  • 相关阅读:
    SpringMVC 配置式开发-HandlerMapping的执行流程(八)
    SpringMVC 配置式开发-BeanNameUrlHandlerMapping(七)
    SpringMVC路径问题回顾,加斜杠和不加斜杠的问题(六)
    web.xml 注册中央调度器Url-pattern 要注意的地方(五)
    SpringMVC执行流程(四)
    Spring 特点
    monkeyrunner操作多个设备的例子
    ant安装、环境变量配置及验证
    二进制、十六进制转换表
    Android源码开发利器——Java源码调试(基于4.1.2)
  • 原文地址:https://www.cnblogs.com/programCaiCai/p/a298454de440afd274fea3f8ee6e42f8.html
Copyright © 2011-2022 走看看