首页 > 其他分享 >#离线,线段树#SP1557 GSS2 - Can you answer these queries II

#离线,线段树#SP1557 GSS2 - Can you answer these queries II

时间:2024-04-05 23:00:39浏览次数:26  
标签:return these 离线 SP1557 int rec include Mx

题目

给定大小为 \(n\) 的序列,\(q\) 次询问,求最大子段和,

相同的数只算一次。选出的子段可以为空。


分析

数字不重复很难做,考虑离线,询问区间按右端点排序

枚举区间右端点,不重复就相当于给 \([pre+1,i]\) 为开头的区间后添加 \(a_i\)

那么相当于维护以 \(j\) 为开头的最大子段和,以及历史最大子段和

那么下放懒标记就要注意次序(先处理历史值再处理当前值)


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=100011; typedef long long lll;
struct rec{int l,r,rk;}q[N];
int n,pre[N<<1],a[N],Q; lll ans[N];
struct Rec{
    lll mx,Mx,lazy,Lazy;
    void ptag(lll tag,lll Tag){
        Mx=max(Mx,mx+Tag),mx+=tag;
        Lazy=max(Lazy,lazy+Tag),lazy+=tag;
    }
}w[N<<2];
int iut(){
    int ans=0,f=1; char c=getchar();
    while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
    while (isdigit(c)) ans=ans*10+c-48,c=getchar();
    return ans*f;
}
void print(lll ans){
    if (ans>9) print(ans/10);
    putchar(ans%10+48);
}
bool cmp(rec x,rec y){return x.r<y.r;}
Rec pup(Rec f,Rec g){
    Rec h; h.lazy=h.Lazy=0;
    h.mx=f.mx>g.mx?f.mx:g.mx;
    h.Mx=f.Mx>g.Mx?f.Mx:g.Mx;
    return h;
}
void update(int k,int l,int r,int x,int y,int z){
    if (l==x&&r==y){
        w[k].ptag(z,z);
        return;
    }
    int mid=(l+r)>>1;
    if (w[k].lazy||w[k].Lazy){
        w[k<<1].ptag(w[k].lazy,w[k].Lazy);
        w[k<<1|1].ptag(w[k].lazy,w[k].Lazy);
        w[k].lazy=w[k].Lazy=0;
    }
    if (y<=mid) update(k<<1,l,mid,x,y,z);
    else if (x>mid) update(k<<1|1,mid+1,r,x,y,z);
        else update(k<<1,l,mid,x,mid,z),update(k<<1|1,mid+1,r,mid+1,y,z);
    w[k]=pup(w[k<<1],w[k<<1|1]);
}
Rec query(int k,int l,int r,int x,int y){
    if (l==x&&r==y) return w[k];
    int mid=(l+r)>>1;
    if (w[k].lazy||w[k].Lazy){
        w[k<<1].ptag(w[k].lazy,w[k].Lazy);
        w[k<<1|1].ptag(w[k].lazy,w[k].Lazy);
        w[k].lazy=w[k].Lazy=0;
    }
    if (y<=mid) return query(k<<1,l,mid,x,y);
    else if (x>mid) return query(k<<1|1,mid+1,r,x,y);
        else return pup(query(k<<1,l,mid,x,mid),query(k<<1|1,mid+1,r,mid+1,y));
}
int main(){
    n=iut();
    for (int i=1;i<=n;++i) a[i]=iut();
    Q=iut();
    for (int i=1;i<=Q;++i) q[i]=(rec){iut(),iut(),i};
    sort(q+1,q+1+Q,cmp);
    for (int i=1,j=1;i<=Q;++i){
        for (;j<=q[i].r;++j){
            update(1,1,n,pre[a[j]+100000]+1,j,a[j]);
            pre[a[j]+100000]=j;
        }
        ans[q[i].rk]=query(1,1,n,q[i].l,q[i].r).Mx;
    }
    for (int i=1;i<=Q;++i) print(ans[i]),putchar(10);
    return 0;
}

标签:return,these,离线,SP1557,int,rec,include,Mx
From: https://www.cnblogs.com/Spare-No-Effort/p/18116410

相关文章

  • 离线数仓(九)【DWS 层开发】
    前言    上一个DWD层用了半个月时间,但是慢有慢的好处;今天开始DWS层的学习,目标是4月初把项目完成,完了赶紧从头回顾一遍项目。    今天操场跑了20分钟,顺便在这里记录一下,现在每周只有没早八的时候能跑一下了,近一年没有好好跑步了,这个习惯应该找回来了......
  • python3.12.2银河麒麟v10鲲鹏离线快速部署
    python3.12.2银河麒麟v10鲲鹏离线快速部署背景清明假期忙活了一整天发现自己方向走错了.部署效率巨慢无比.其实简单情况下很快就可以弄好.自己最开始使用python3.9使用的是libressl发现最新版已经不需要了.并且使用仓库中的就可以.系统版本说明公司的银河麒麟v10......
  • mysql windows离线安装
    D:\mysql-8.2.0-winx64\bin>mysqld--removemysql8.2Servicesuccessfullyremoved.D:\mysql-8.2.0-winx64\bin>mysqld--installmysql8.2Servicesuccessfullyinstalled.D:\mysql-8.2.0-winx64\bin>mysqld--initialize--console2024-03-29T06:05:......
  • 查看用户所在区域,IP定位离线库助您实现精准销售目标
     IP定位是现如今互联网营销中非常重要的一项技术。通过对用户的IP地址进行定位,可以精准地了解用户所在的地理位置,并根据不同地域的特点进行精准的销售目标定位。而为了实现这一目标,IP定位离线库成为了不可或缺的工具。本文将介绍一款IP定位离线库,即挖数据平台的IP定位离线库,来......
  • centos7离线安装reids6
    以centos7.9.2009离线安装reids6.2.9为例redis的tar包下载平台http://download.redis.io/releases/1.安装准备redis是c语⾔开发的,安装redis需要c语⾔的编译环境,需要安装gcc(默认安装)redis的源码中,有一些测试和脚本是使用tcl编写的,需要安装tcl(默认不安装)yum-yinstall......
  • ARM架构银河麒麟使用笔记-下载docker软件包及所有依赖包并在离线环境下安装
    ARM架构银河麒麟使用笔记-下载docker软件包及所有依赖包并在离线环境下安装arm银河麒麟aptdocker目的是在arm架构的银河麒麟操作系统V10中安装docker。一、给虚拟机创建快照1.创建qemu-imgsnapshot-cEmptyKylinrootfs.qcow22.查看qemu-imgsnapshot-lrootfs......
  • 大数据模型、离线架构、实时架构 有用 各种架构图及优点
    一.大数据模型8种常见的大数据分析模型:1、留存分析模型;2、漏斗分析模型;3、全行为路径分析;4、热图分析模型;5、事件分析模型;6、用户分群模型;7、用户分析模型;8、黏性分析模型。1、留存分析模型留存分析模型是一种用来分析用户参与情况/活跃程度的分析模型,考察进行初始行为的用户中......
  • Unity制作本地离线数字人功能模块记录
    耗时半个月实现数字人各个功能模块记录一下个人感觉比较好的功能模块:1、TTS,语音合成,GPT-SoVITS,可本地部署使用cuda/gpu/cpu运算,https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e2、ASR,语音识别,FunASR,阿里开源模型,可本地部署当前为cpu运算版本,中文识别王......
  • 实时渲染什么意思?实时渲染和离线渲染的本质区别
    一、实时渲染是什么意思?实时渲染是指在计算机程序运行时即时地生成图像和动画的过程,这种渲染技术通常用于网络游戏、虚拟现实和增强现实等需要实时交互的XR应用中。实时渲染需要在每秒内渲染数百万到数十亿个像素,以呈现出平滑的动画和交互性能,它包括了一系列的计算和处理步骤,如几......
  • linux离线安装jenkins及使用教程
    本教程采用jenkins.war的方式离线安装部署,在线下载的方式会遇到诸多问题,不宜采用一、下载地址地址:Jenkinsdownloadanddeployment下载最新的长期支持版由于jenkins使用java开发的,所以需要安装的linux服务器装有jdk环境,并且jdk版本支持你所安装的jenkins版本点击 Hard......