//poj4047
#include <iostream>
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(int t,int l,int r) {
a[t].l = l;
a[t].r = r;
a[t].v = a[t].c = 0;
if (l==r) return;
int mid=(l+r)>>1;
buildtree(LL(t),l,mid);
buildtree(RR(t),mid+1,r);
}
void up(int t) {
a[t].v = max(a[LL(t)].v,a[RR(t)].v);
}
void down(int t) {
//无法向下传,清除原子空间lazy标记,防爆
if (a[t].l==a[t].r) {
a[t].c = 0;
return;
}
if (a[t].c) {
a[LL(t)].c += a[t].c;
a[RR(t)].c += a[t].c;
a[LL(t)].v += a[t].c; //这两行很重要!!开始我忘写了,忘写就不是lazy了!
a[RR(t)].v += a[t].c;
a[t].c = 0;
}
}
//区间加
void add(int t,int b,int c,int x) {
if (a[t].l==a[t].r) {
a[t].v += x;
return;
}
if (b==a[t].l && a[t].r==c) {
a[t].c += x;
a[t].v += x;
return;
}
down(t);
int mid=(a[t].l+a[t].r)>>1;
if (c<=mid) add(LL(t),b,c,x);
else if (mid+1<=b) add(RR(t),b,c,x);
else {
add(LL(t),b,mid,x);
add(RR(t),mid+1,c,x);
}
up(t);
}
//求最大值
int query(int t,int b,int c) {
down(t);
if (b==a[t].l && a[t].r==c)
return a[t].v;
int mid=(a[t].l+a[t].r)>>1;
if (c<=mid) return query(LL(t),b,c);
else if (mid+1<=b) return query(RR(t),b,c);
else {
return max(query(LL(t),b,mid),query(RR(t),mid+1,c));
}
}
int cas,n,m,k,b,c,r,bb,cc,val[maxn];
int main() {
scanf("%d",&cas);
while (cas--) {
scanf("%d%d%d",&n,&m,&k);
buildtree(1,1,n-k+1);
for (int i=1;i<=n;i++) {
scanf("%d",&val[i]);
b = i-k+1;
if (b<1) b = 1;
c = i;
if (c>n-k+1) c = n-k+1;
add(1,b,c,val[i]);
}
for (int i=1;i<=m;i++) {
scanf("%d%d%d",&r,&b,&c);
if (r==0) {
int tmp = c - val[b];
val[b] = c;
bb = b-k+1;
if (bb<1) bb = 1;
cc = b;
if (cc>n-k+1) cc = n-k+1;
add(1,bb,cc,tmp);
}
else if (r==1) {
int tmp = val[c] - val[b];
val[b] += tmp;
bb = b-k+1;
if (bb<1) bb = 1;
cc = b;
if (cc>n-k+1) cc = n-k+1;
add(1,bb,cc,tmp);
val[c] -= tmp;
bb = c-k+1;
if (bb<1) bb = 1;
cc = c;
if (cc>n-k+1) cc = n-k+1;
add(1,bb,cc,-tmp);
}
else {
printf("%d\n",query(1,b,c-k+1));
}
}
}
return 0;
}
相关推荐
按照autoware.universe官方从零搭建自己的自动导航小车(三)(续)
本文介绍了在Autoware框架下完善自定义传感器套件描述包的详细过程。主要内容包括:1)创建传感器描述包tinyplc_sensor_kit_description,包含YAML标定文件和URDF模型;2)配置传感器与车辆基座的相对位姿,实现sensor_kit.xacro和sensors.xacro宏文件;3)更新sensor_kit.launch.xml文件以集成激光雷达和GNSS/IMU驱动。通过xacro验证URDF模型正确性后,下一步计划接入Helios16激光雷达数据并在Rviz2中验证点云显
poj4047(线段树+延迟更新)
//线段树延迟更新 //将连续相邻的k个数据的和看成一个元素,建立线段树;交换、替代两种操作都可以统一成加法操作 //-------加法 //若当前加法操作的区间和当前所在节点的左右区间相同,则只修改延迟标记adi,和当前区间的最大值sum;若不一致,才开始向下执行加法操作,同时修改最大值 //------查询 //若当前查询的区间和当前所在区间相同,则直接返回结果;若不一致
Arduino DHT11 ESP8266 在OneNet云平台上读取 温湿度
#include "ESP8266.h" #include "dht11.h" #include "SoftwareSerial.h" #define SSID "540ND" #define PASSWORD "" #define HOST_NAME "api.heclouds.com" #define DEVICE_ID "" #define HOST_PORT (80) String APIKey = " "; #define INTER
poj 4047 Garden
金华邀请赛的题,可惜现场赛我sb了,没想出来,还是队友想的……还是要不断的练习呀,隔断时间不练习就不会了 #include #include #include using namespace std; #define lson l,m,rt #define rson m+1,r,rt const int maxn=222222; int d[4*maxn],n,k
百度无人车ApolloAuto使用入门
1.安装原版ubuntu 14.04 http://www.ubuntu.org.cn/download/alternative-downloads 2.安装对应ubuntu 14.04的indigo版ROS http://wiki.ros.org/indigo/Installation/Ubuntu 3.安装Apollo Kernel https://github.co
SAP IDOC实战:5分钟搞定采购订单自动生成销售订单(附完整配置流程)
本文详细介绍了如何利用SAP IDOC技术,在5分钟内实现采购订单自动生成销售订单的完整配置流程。通过清晰的步骤解析和实战案例,帮助用户理解IDOC在跨公司交易中的核心价值,掌握从环境准备、合作伙伴参数配置到输出类型设置的关键操作,并提供了常见错误的排查方法,助力企业快速搭建高效、可靠的供应链自动化桥梁。
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,也是成段更新,查询为区间元素和,有些不同。
保姆级教程:从Salmon输出到DESeq2,搞定RNA-seq表达矩阵标准化与下游分析准备
本文提供从Salmon输出到DESeq2标准化的RNA-seq数据分析全流程指南,详细解析表达矩阵构建、标准化方法选择及下游分析准备。重点介绍如何将Salmon定量结果转换为DESeq2兼容格式,包括TPM与原始计数的处理技巧,以及常见问题排查方法,帮助研究人员高效完成RNA-seq数据分析。
poj 4047 Garden(线段树)
http://poj.org/problem?id=4047 求给定区间连续k个值和的最大值,有单点更改和交换操作。 这题主要是建树,以每个节点开始的连续k个值的和作为一个节点,这样共有n-k+1个节点,更新时计算出更新的点所在节点的范围,更新值为 新值-旧值。 交换即为两次更新,线段树记录节点最大值。code:#include<cstdlib>#include<cctype...
如何创建 SAP ABAP CDS View 的 Association
所以本文我们虽然学习了如何创建 SAP CDS View 的 association,知道了 association 是用来在 CDS View 里将两张数据库表关联起来,但根本不知道怎么使用这个 association. 而且从 association 的写法来看,似乎和本教程之前介绍 inner join,left join 这些数据库表的连接操作没什么区别,都是根据两张表的 carrid 和 connid 字段相同进行的连接。只看到了我们在 CDS View 源代码实现里,放出来的四个字段。
学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计
本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A
POJ-4047-线段树
#include #include #include #include #include #include #include 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;
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
POJ 4047 Garden 线段树
这题只要想出怎么建树就简单了吧。 他问的是连续k个值最大的是多少 就可以用1~k之和,2~k+1之和,3~k+2之和.......做为结点。 然后就发现,变成了简单的区间更新和区间查询问题了。 #include #include #include #include #include #include #include #include #include #define e
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
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+
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
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
POJ 4047 Garden(线段树)
这个题目,emmm,PDF格式,我复制出来实在是没啥格式可言,这里就不挂题目了。 参考题解 有n个连续的一维上的点,每个点有一个美丽值。 每次有三种操作: 1、将x点的美丽值改为y。 2、将x、y交换 3、查询[x y]间,连续k个点的美丽值总和的最大值。 这里我是看的题解的做法,利用线段树,叶子i表示[i i+k]美丽值总和,然后每个点维护一个区间最大值。每个位置向前取k个数,作为这个位置的结果...
POJ 2012金华邀请赛 (持续更新)
第一题,水题,但是题目读了很久,英语功底果然很差,主要是第二次排序的时候是按位排序,先按个位从小到大,然后是十位从小到大。题目描述太奇葩,这句话领会了很久。。 POJ 4044 #include #include #include #include #include #include #include #include #include #include #includ
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 #
poj 4047 Garden 线段树lazy标记与成段更新
线段树lazy标记技术副题详解
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 树的节点维...
POJ - 4047 Garden 线段树 区间更新
题目链接:点击查看 题意: 给出一个N个数的序列以及一个k(0<k<=n<=200000),m个操作p,x,y,其中 p=0:将x位置的数替换为y p=1:将x y位置的数互换 p=2: 查询x-y位置区间连续k个数的和的最大值 题解:每个位置向前取k个数,作为这个位置的结果,线段树维护下每个区间的最大值即可,当改变一个位置p 的数时,把他所影响的区间(p,p+k-...
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了,所以我们只要建一颗总节点范围为
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区间,但是一直想不出怎么维护父节点和子节点的关系。估计如果实在现场会困死在此题。。。 于是需要转换一下思维,把点当做区间把区
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这个范围内所有节点的值。就是将一个单点更新转换成成段更新。查
POJ 4047 Garden
POJ 4047 Garden 线段树题目,很简单。需要预处理一下,树的节点中存储的元素为区间的两个端点,然后该段中最大的值,还有延迟标记。预处理的时候先求出所有长度为k的序列的长度,然后建树。具体的程序如下:开始的时候忽略了测试例子数,所以一直runtime error。 /* ID : csuchenan PEOG: D Garden LANG: C++ */ #include #inc
1272



被折叠的 条评论
为什么被折叠?



