首页 > 其他分享 >AcWing,第108场周赛T3 拼接数组

AcWing,第108场周赛T3 拼接数组

时间:2023-07-02 17:35:38浏览次数:44  
标签:周赛 rs int T3 seg 108 ls 数组 id

AcWing,第108场周赛T3

前置知识:P1115 最大子段和 的dp和线段树作法

分析:对于一个数组,可以直接求出最大字段和,但由于多个数组拼接在一起,没有办法直接求得拼接数组的最大字段和。求最大字段和我已知有两种方法:

  1. dp
  2. 线段树

先对每一个数组用线段树求出最大前缀和,最大字段和,最大后缀和,再才用Dp的思路求出拼接后数组的最大字段和,和P1115 最大子段和 的dp作法差不多

\[res = \max (seg_{b_{i}ms}, dp_{i - 1} + seg_{b_{i}ls},dp_{i - 1} + seg_{b_{i}s}, seg_{b_{i}rs}) \\ dp_i = \max (dp_{i - 1} + seg_{b_{i}s}, seg_{b_{i}rs},0) \]

\(i\) 代表拼接数组的第 \(i\) 个数组,\(\texttt{seg}\) 代表线段树处理的最大前缀和,最大字段和,最大后缀和,数组值分别为\(\texttt{ls,ms,rs,s}\) , \(b_i\) 是要拼接的数组

//  AC one more times

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;
const int N = 3e5 + 10;


int n, m, a[60][5010], l[N];
ll f[N];

struct info
{
    ll ms,ls,rs,s;
};
info operator + (const info t1,const info t2)
{
    info t;
    t.s=t1.s+t2.s;
    t.ls=max(t1.ls,t1.s+t2.ls);
    t.rs=max(t2.rs,t2.s+t1.rs);
    t.ms=max({t.ls,t.rs,t1.ms,t2.ms,t1.rs+t2.ls});
    return t;
}

struct segtree
{
    info t;
}seg[60][N];

void update(int x, int id)
{
    seg[x][id].t=seg[x][id*2].t+seg[x][id*2+1].t;
}

void buildtree(int x, int id,int l,int r)
{   
    if(l==r)
    {
        seg[x][id].t={a[x][l],a[x][l],a[x][l],a[x][l]};
        return;
    }
    int mid=(l+r)>>1;
    buildtree(x, id*2,l,mid);
    buildtree(x, id*2+1,mid+1,r);
    update(x, id);
}

void solve()
{       
    cin>>n>>m;
    for(int i = 1; i <= n; i++)
    {
        cin>>l[i];
        for(int j = 1; j <= l[i]; j++)
            cin>>a[i][j];
        buildtree(i, 1, 1, l[i]);
    }
    ll res = -(1ll << 60ll);
    for(int i = 1; i <= m; i++)
    {
        int id; cin>>id;
        res = max({res, seg[id][1].t.ls + f[i - 1], seg[id][1].t.ms, f[i - 1] + seg[id][1].t.s, seg[id][1].t.rs});
        f[i] = max({f[i - 1] + seg[id][1].t.s, seg[id][1].t.rs, 0ll});
    }
    cout<<res<<'\n';
    return;
}


  
int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    
    int TC = 1;
    
    //cin >> TC;    
    for(int tc = 1; tc <= TC; tc++)
    {
        //cout << "Case #" << tc << ": ";         
        solve();
    }


    return 0;
}

标签:周赛,rs,int,T3,seg,108,ls,数组,id
From: https://www.cnblogs.com/magicat/p/17521051.html

相关文章

  • SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案
    SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案SpringBoot已经成为Java开发中最流行的框架之一,它提供了一种快速构建、易于扩展的方式,使开发人员能够更加专注于业务逻辑而不是繁琐的配置。而最新的SpringBoot3.0版本将进一步改善开发体验,并提供更多的解决方......
  • 【哈佛cs50 2022】lab3 & problemSet3【ing】
    (1)lab3如何测试每个代码运行所需要的时间?time./sort1sorted5000.txt sort1sort2sort3sorted5000.txt0.037s0.020s0.045ssorted10000.txt0.058s0.050s0.151ssorted50000.txt1.244s2.238s5.637sreversed5000.txt0.088s0.026s0.045srever......
  • U盘到底用什么格式好?FAT32、NTFS还是exFAT?
     装机小能手原账号名:“老毛桃winpe”,望大家多多支持哦!​关注 350人赞同了该文章说到U盘,相信很多朋友对它既熟悉又陌生,熟悉?无论是在学习中还是工作中,我们经常会用到;陌生?大家只知道U盘体积小巧,却能存储很多文件,但除此之外,你还知道什么呢?老毛桃相信不少......
  • 记录炫龙t3 windows10闪屏
    2021.3.25又总是蓝屏难受,不知道什么原因,只能把驱动再次升级一下.历史我的电脑是炫龙的,一开始以为翻车了,电脑总是闪屏,因为是双显,然后就把核显给禁用掉,结果还是不断闪屏,有时候看个电影也闪屏,发现只要GPU使用了百分之10就开始了,难受的要人命,原本打算返修,但是电脑要工作,也......
  • 关于ext2-ext3-ext4文件系统的创建及基本信息的查看
    本文使用的操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)关于ext2-ext3-ext4文件系统的创建,分别如下:[root@qq-5201351~]#mkfs.ext2/dev/nvme1n1[root@qq-5201351~]#mkfs.ext3/dev/nvme1n1[root@qq-5201351~]#mkfs.ext4/dev/nvme1n1说明:通过以上3种方式......
  • 关于ext2-ext3-ext4文件系统的介绍及区别
    Ext2第二代扩展文件系统(secondextendedfilesystem),是LINUX内核所用的文件系统。它开始由RémyCard设计,用以代替ext,于1993年1月加入linux核心支持之中。Ext2:是GNU/Linux系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层......
  • 代码随想录算法训练营第二十天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索
    669.修剪二叉搜索树思路递归法: 需要思考清楚,如果当前节点<low,那么就返回递归它的右节点,而不是自己取判断,找出来一个合适的节点,这样的话会越想越乱代码:1TreeNode*trimBST_cursor(TreeNode*root,intlow,inthigh){2if(!root)returnnullptr;34if......
  • springboot3视频教程,很多可用的教学资源
    不得不说,学习SpringBoot是非常有必要的,尤其是对于Java后端开发人员来说。SpringBoot是基于SpringFramework的快速开发框架,通过自动配置和约定优于配置的原则,大大简化了Spring应用的开发和部署。它提供了丰富的功能和开箱即用的特性,可以帮助开发者快速搭建高效、可靠的企业级应用......
  • uva 10878(字符串)
    题目:"Machinestakemebysurprisewithgreatfrequency."AlanTuringYourbosshasjustunearthedarollofoldcomputertapes.Thetapeshaveholesinthemandmightcontainsomesortofusefulinformation.Itfallstoyoutofigureoutwhatisw......
  • 【服务器数据恢复】ext3文件系统下raid5热备盘同步失败导致阵列崩溃的数据恢复案例
    服务器数据恢复环境:两组分别由4块SAS硬盘组建的raid5磁盘阵列,ext3文件系统,通过LVM管理磁盘存储。服务器故障:一组raid5磁盘阵列中的1块硬盘故障离线,热备盘成功启用并开始同步数据,在同步还没有完成的情况下该组raid5阵列中的另外一块硬盘故障掉线,该组Raid5阵列崩溃,LVM结构损坏,文件......