zoukankan      html  css  js  c++  java
  • CodeForces722C Destroying Array【瞎搞】

    题意:
    先给你一个序列,然后给你n个1-n的一个数,让你求前i个元素销毁的时候,区间字段和区间最大;
    思路:

    离线处理,维护新区间首尾位置的起点和终点,倒着处理;


    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    typedef pair<int,int>PII;
    const double eps=1e-5;
    const double pi=acos(-1.0);
    //const int mod=1e9+7;
    const int INF=0x3f3f3f3f;
    
    const int N=1e5+10;
    struct asd{
        int s,t;
    };
    asd q[N];
    
    LL a[N];
    LL ans[N],sum[N];
    int sp[N],temp[N];
    
    int main()
    {
        int n;
        scanf("%d",&n);
        sum[0]=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        for(int i=1;i<=n;i++)
            scanf("%d",&sp[i]);
    
        memset(temp,0,sizeof(temp));
        for(int i=1;i<=n;i++)
            q[i].s=q[i].t=i;
    
        ans[n]=0;
        LL TMAX=0;
        for(int i=n;i>=2;i--)
        {
            temp[sp[i]]=1;
            if(temp[sp[i]-1])
                q[sp[i]].s=q[sp[i]-1].s;
            if(temp[sp[i]+1])
                q[sp[i]].t=q[sp[i]+1].t;
            q[q[sp[i]].t].s=q[sp[i]].s;
            q[q[sp[i]].s].t=q[sp[i]].t;
            TMAX=max(TMAX,sum[q[sp[i]].t] - sum[q[sp[i]].s-1]);
            ans[i-1]=TMAX;
    //        printf("%d %d
    ",q[sp[i]].s,q[sp[i]].t);
        }
        for(int i=1;i<=n;i++)
            printf("%lld
    ",ans[i]);
        return 0;
    }


  • 相关阅读:
    通用二进制格式安装、编译安装过程(以mysql为例)
    linux:网络
    深圳:软通-运维
    深圳:软通-python
    linux:用户管理
    linux:vim
    深圳:卡莱特-售前/售后服务
    linux:基本指令
    linux:安装
    电脑:磁盘扩容
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777515.html
Copyright © 2011-2022 走看看