POJ-4047-线段树

CentOS7下OpenVPN Access Server 2.12.0安装与智能分流配置指南 本文详细介绍了在CentOS7系统上安装OpenVPN Access Server 2.12.0并进行智能分流配置的完整指南。从环境准备、核心安装到智能分流策略的深度配置,提供了经过验证的优化方案和故障排查技巧,帮助用户实现高效的VPN网关部署和流量管理。 阅读详情

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;

const int maxn = 200009;

int n, nn, m, k; 
int a[maxn], b[maxn];
struct tree
{
    int l, r, v, lazy, mid;
}t[maxn*4];

int build(int l, int r, int k)
{
    t[k].l = l;
    t[k].r = r;
    int mid = (l+r)/2;
    t[k].mid = mid;
    t[k].lazy = 0;
    if(l==r)
    {
        t[k].v = b[l];
        return b[l];
    }
    return t[k].v = max( build(l, mid, k*2), build(mid+1, r, k*2+1) );
}

void down(int k)
{
    if(t[k].l == t[k].r) return;
    t[k*2].v += t[k].lazy;
    t[k*2].lazy += t[k].lazy;
    t[k*2+1].v += t[k].lazy;
    t[k*2+1].lazy += t[k].lazy;
    t[k].lazy = 0;
}

void updata(int l, int r, int v, int k)
{
    if(t[k].l==l && t[k].r==r)
    {
        t[k].v += v;
        t[k].lazy += v;
        return;
    }
    if(t[k].lazy) down(k);
    if(r<=t[k].mid) updata(l, r, v, k*2);
    else if(l>t[k].mid) updata(l, r, v, k*2+1);
    else
    {
        updata(l, t[k].mid, v, k*2);
        updata(t[k].mid+1, r, v, k*2+1);
    }
    t[k].v = max(t[k*2].v, t[k*2+1].v);
}

int q(int l, int r, int k)
{
    if( t[k].l==l && t[k].r==r ) return t[k].v;

    if( t[k].lazy ) down(k);

    if( r<=t[k].mid ) return q(l, r, k*2);
    else if( l>t[k].mid ) return q(l, r, k*2+1);
    else
    {
        return max( q(l, t[k].mid, k*2), t[k].lazy + q(t[k].mid+1, r, k*2+1) );
    }
}
int main()
{
    int i, j, tt, p, x, y;
    scanf("%d", &tt);
    while(tt--)
    {
        scanf("%d%d%d", &n, &m, &k);
        nn = n-k+1;
        b[1] = 0;
        for(i=1; i<=k; i++)
        {
            scanf("%d", &a[i]);
            b[1] += a[i];
        }
        for(i=k+1; i<=n; i++)
        {
            scanf("%d", &a[i]);
            b[i-k+1] = b[i-k] + a[i] - a[i-k];
        }
        build(1, nn, 1);


        while(m--)
        {
            scanf("%d%d%d", &p, &x, &y);
            if(p==0)
            {
                if( y==a[x] ) continue;
                updata( max(1, x-k+1), min(x, nn), y-a[x], 1 );
                a[x] = y;
            }
            else if(p==1)
            {
                if( a[x]==a[y] ) continue;
                updata( max(1, x-k+1), min(x, nn), a[y]-a[x], 1 );
                updata( max(1, y-k+1), min(y, nn), a[x]-a[y], 1 );
                swap( a[x], a[y] );
            }
            else
            {
                printf("%d\n", q(x, y-k+1, 1));
            }
        }
    }
	return 0;
}

把 n 个数, 变成 n-k+1 个和。

变成就区间最值问题。



PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计 PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计提示:本文采用PHP对数据库进行操作:本文就介绍了PHP实现对MySQL数据库的增删改查操作基础内容。 阅读详情

相关推荐

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

poj 4047 Garden(线段树)

http://poj.org/problem?id=4047 求给定区间连续k个值和的最大值,有单点更改和交换操作。 这题主要是建树,以每个节点开始的连续k个值的和作为一个节点,这样共有n-k+1个节点,更新时计算出更新的点所在节点的范围,更新值为 新值-旧值。 交换即为两次更新,线段树记录节点最大值。code:#include<cstdlib>#include<cctype...

weixin_33671935的博客 116

VSCode多文件C语言项目编译实战:从配置到运行

本文详细讲解了如何在VSCode中配置多文件C语言项目的编译环境。通过手把手教学,指导读者创建项目结构、编写代码,并重点深度配置task.json与launch.json文件,实现一键编译和调试所有C文件,解决常见的“undefined reference”等链接错误,提升开发效率。

g8f9d0s1a2的博客 1098

poj4047 线段树

//poj4047 #include using namespace std; #define maxn 200100 #define LL(x) (x<<1) #define RR(x) (x<<1|1) struct Seg { int l,r,v,c; int len() {return (r-l+1);} }a[maxn*3]; void buildtree

浅空之下 1008

从零搭建云手机:基于Docker与KVM的实战指南

本文提供了一份基于Docker与KVM从零搭建私有云手机的实战指南。详细介绍了服务器配置选择、KVM虚拟化环境检查、Docker容器部署以及通过VNC进行远程访问的全过程。该方案轻量高效,适合应用测试、手游多开及自动化脚本运行等场景,帮助用户低成本拥有高性能云端安卓设备。

weixin_29208327的博客 558

关于无障碍适配的笔记

针对无障碍兼容性的笔记,针对wcg2.0/2.1

CoffeeAndIce的博客 4212

POJ 4047 Garden 线段树

这题只要想出怎么建树就简单了吧。 他问的是连续k个值最大的是多少 就可以用1~k之和,2~k+1之和,3~k+2之和.......做为结点。 然后就发现,变成了简单的区间更新和区间查询问题了。 #include #include #include #include #include #include #include #include #include #define e

水 1295

Abaqus梁模型仿真中的常见陷阱与优化策略

本文深入探讨了Abaqus梁模型仿真中的常见陷阱与优化策略,涵盖几何建模、材料属性设置、边界条件处理等关键环节。针对梁截面方向定义、网格划分、复合截面建模等典型问题,提供了实用的Python脚本示例和优化方案,帮助工程师避免计算错误并提升仿真精度。文章特别强调了动力分析中的网格密度要求和材料非线性考虑,为复杂工程应用提供专业指导。

weixin_29099217的博客 461

POJ 4047 Garden (线段树)

题意:输入N,M,K。有N个点,每个点有一个值,然后有M个操作 0 x y 表示将x的值赋为y;  1 x y 表示将x和y互换下位置(相应值也互换) ; 2 x y 表示询问[x,y]内连续K个数和的最大值。 一开始想用每个点来建树,发现不好维护区间内连续K个数的和的最大值。 但如果转化一下,因为K是定值,将[x,x+k-1]区间的和看做一个点,这样以连续K个数和作为点,共有N-K+

Paradiser 1029

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 922

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 557

POJ【4047】——Problem D. Garden 线段树

DescriptionThere are n flowerpots in Daniel’s garden. These flowerpots are place positions, and these n positions are numbered from 1 to n. Each flower is assigned an aesthetic value. The aesthetic val

绝尘 617

三菱FX5U-PLC建立CClink的IO通讯

最新需要用三菱的FX5U的PLC搭建一个CClink通讯,PLC做主站,控制CClink从站的IO,下面2个输入模块AJ65SBTB1-32D,两个输出模块AJ65SBTB1-32T。3、在右侧的部件,选择网络模块:FX5-CCL-MS,CC-link主站模块。依次把加入两个AJ65SBTB1-32D,两个AJ65SBTB1-32T。7、基本设置,网络配置设置,链路刷新设置,设置好下面参数,应用。6、基本设置,网络配置设置,CC-Link配置设置。8、部件选择,模块,右键,添加模块标签。

wzz418550729的博客 1001

POJ 4047 Garden(线段树)

这个题目,emmm,PDF格式,我复制出来实在是没啥格式可言,这里就不挂题目了。 参考题解 有n个连续的一维上的点,每个点有一个美丽值。 每次有三种操作: 1、将x点的美丽值改为y。 2、将x、y交换 3、查询[x y]间,连续k个点的美丽值总和的最大值。 这里我是看的题解的做法,利用线段树,叶子i表示[i i+k]美丽值总和,然后每个点维护一个区间最大值。每个位置向前取k个数,作为这个位置的结果...

Steve·Curcy 195

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

POJ 2012金华邀请赛 (持续更新)

第一题,水题,但是题目读了很久,英语功底果然很差,主要是第二次排序的时候是按位排序,先按个位从小到大,然后是十位从小到大。题目描述太奇葩,这句话领会了很久。。 POJ 4044 #include #include #include #include #include #include #include #include #include #include #includ

just_water 1591

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

poj 4047 Garden 2012金华邀请赛 线段树

/* 三种操作 0 x y 把x位置的值改成y 1 x y 交换x与y位置的值 2 x y 统计[x,y]中连续k个值的最大值 我们把1-k的和值作为b[1],2-(k+1)的和值作为b[2],以此类推 那么可以建立一棵[1,n-k+1]的线段树 求连续k个和的最大值,退化为求某个区间的最值问题 线段树中有延迟操作,优化时间效率 */ #include #include #include #

Join Hands 3504

poj 4047 Garden 线段树lazy标记与成段更新

线段树lazy标记技术副题详解

sepNINE的专栏 782

POJ 4047 Garden 线段树 区间更新

给出一个n个元素的序列,序列有正数也有负数 支持3个操作: p x y 0.p=0时,把第x个的值改为y 1.p=1时,交换第x个和第y个的值 2.p=2时,问区间[x,y]里面连续k个的子序列的最大和(保证y-x+1>=k) 我们只要定义数组v v[i]表示原序列中,从第i个开始,连续k个元素的值的和 然后我们只需要维护一棵线段树,树的叶子节点表示数组v 树的节点维...

weixin_30412577的博客 111

poj4047(线段树+延迟更新)

//线段树延迟更新 //将连续相邻的k个数据的和看成一个元素,建立线段树;交换、替代两种操作都可以统一成加法操作   //-------加法 //若当前加法操作的区间和当前所在节点的左右区间相同,则只修改延迟标记adi,和当前区间的最大值sum;若不一致,才开始向下执行加法操作,同时修改最大值   //------查询 //若当前查询的区间和当前所在区间相同,则直接返回结果;若不一致

晓风残月xj 814

POJ - 4047 Garden 线段树 区间更新

题目链接:点击查看 题意: 给出一个N个数的序列以及一个k(0&lt;k&lt;=n&lt;=200000),m个操作p,x,y,其中 p=0:将x位置的数替换为y p=1:将x y位置的数互换 p=2:  查询x-y位置区间连续k个数的和的最大值 题解:每个位置向前取k个数,作为这个位置的结果,线段树维护下每个区间的最大值即可,当改变一个位置p 的数时,把他所影响的区间(p,p+k-...

还我笑颜 156

POJ - 4047 Garden(线段树成段更新,查询最值)

题意:含n个元素的序列 ,有q个操作。 操作( p x y)有三种: 0 x y :把第x个的值改为y 1 x y:交换第x个和第y个的值 2 x y:问区间[x,y]里面连续k个的子序列的最大和 思路:先处理序列,SumK[i]表示从i开始的k个数的和,然后线段树建树,成段更新,查询。更新只要处理成对区间最值得加减就可以了。 成段更新还是不熟悉,于是顺便做了 POJ - 3468 A Simple Problem with Integers,也是成段更新,查询为区间元素和,有些不同。

luciozhang的博客 787

poj 4047金华邀请赛 D题 (线段树+lazy优化)

/*题意: 给出一个N个数的序列以及一个k(0<k<=n<=200000),m个操作p,x,y,其中 p=0:将x位置的数替换为y p=1:将x y位置的数互换 p=2: 查询x-y位置区间连续k个数的和的最大值 分析:因为要求连续区间的最大,我们可以把区间和当做一个节点,这样区间就代表一个点,点就代表一个区间了,这样就可以把原来1~n个数重新分为1~n-k+1了,所以我们只要建一颗总节点范围为

Weiguang_123的专栏 2125

Poj 4047 Garden /2012金华邀请赛D题(线段树)

题意:给出长度为200000的数列,进行200000次下列操作: 0 x y 将x的值置为y 1 x y 交换x和y的值 2 x y 求[x,y]区间内和最大的一个连续的长度为k的区间(y-x>k) 解法:显而易见的线段树开始一直想维护每个区间的最大k区间,但是一直想不出怎么维护父节点和子节点的关系。估计如果实在现场会困死在此题。。。        于是需要转换一下思维,把点当做区间把区

新博客地址:sensirly.github.io 2180

poj 4047 Garden(线段树,伤!12年金华邀请赛D题)

我因为在更新a[t].flag的值的时候,手贱写成了a[t].flag=k而不是a[t].flag+=k,这么一个小错误卡掉了我的1A,今天周末的好心情和半个下午的时间。、 题目的思路很简单。我们从左到右,用b[i]存下来b[i...i+k-1]的和,将这个和的值更新到线段树中去,每次改变第x个花盆的值,我们将其看作修改从x-k+1到x这个范围内所有节点的值。就是将一个单点更新转换成成段更新。查

zizaimengzhongyue的专栏 680

POJ 4047 Garden

POJ 4047 Garden 线段树题目,很简单。需要预处理一下,树的节点中存储的元素为区间的两个端点,然后该段中最大的值,还有延迟标记。预处理的时候先求出所有长度为k的序列的长度,然后建树。具体的程序如下:开始的时候忽略了测试例子数,所以一直runtime error。 /* ID : csuchenan PEOG: D Garden LANG: C++ */ #include #inc

BootStar 425

POJ 4047 Garden 解题报告

题目 题意: 有n个连续的一维上的点,每个点有一个美丽值。 每次有三种操作: 1、将x点的美丽值改为y。 2、将x、y交换 3、查询[x y]间,连续k个点的美丽值总和的最大值。 解法: 线段树,叶子i表示[i i+k]美丽值总和,然后每个点维护一个区间最大值。 修改时区间修改,将包含x的所有叶子都修改(用lazy标记),查询时输出区间最大值。 Time:3

Tri_integral的专栏 938
上一篇: HDU-3695-ac自动机
下一篇: POJ-4052-ac自动机
walk_up
博客等级 码龄15年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值