UVa 11992 Fast Matrix Operations(两种标记的线段树)

AI智能体Codex实战:外贸客户开发自动化,85家精准客户深度分析 如果你在外贸行业,特别是工业品领域,一定遇到过这样的困境:想开发海外客户,但不知道从何下手。Google搜索出来的要么是B2B平台上的老面孔,要么是信息残缺的过时黄页。手动筛选、整理、验证,一个客户信息就要花上半小时,效率低得让人抓狂。 更头疼的是,好不容易找到一些公司名称,却不知道他们的采购决策人是谁、公司规模如何、业务是否匹配。传统的客户开发就像大海捞针,投入大量时间成本,回报却充满不确定性。 今天要介绍的这个工具,可能会彻底改变你的工作流。它不是另一个CRM软件,而是一个基于AI的智能客户开发与情报分 阅读详情
本题涉及到了线段数大多数基本操作。
因为只有20行,所以可以建20个线段树。
线段树最重要的两个函数:
pushdown 下移标记,并更新子节点数据。
pushup  由2个子节点数据更新父节点数据。


写法有很多,介绍一种不容易错的:
保证在设置标记的同时更新节点信息。即:在update给某节点打标记,以及pushdown下发标记时,都马上更新节点信息。
这样写的效果是pushup很短,直接更新,因为子节点的信息已经保证被更新过了,不需要考虑标记。相反在pushdown的时候要写很长,因为要直接更新子节点。


set操作会清空add标记。


代码:

//
//  main.cpp
//  11992 Fast Matrix Operations
//
//  Created by Baoli1100 on 15/3/14.
//  Copyright (c) 2015年 Baoli1100. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 800005
#define INF 1000000000
struct Tree{
    int Sum[maxn],Min[maxn],Max[maxn],add[maxn],Set[maxn];
    int sumr,minr,maxr;
    int op,y1,y2;
    void init(){
        memset(Sum,0,sizeof(Sum));
        memset(add,0,sizeof(add));
        memset(Set,-1,sizeof(Set));
        memset(Min,0,sizeof(Min));
        memset(Max,0,sizeof(Max));
    };
    void pushup(int rt){
        int lc=rt<<1,rc=rt<<1|1;
        Sum[rt]=Sum[lc]+Sum[rc];
        Min[rt]=min(Min[lc],Min[rc]);
        Max[rt]=max(Max[lc],Max[rc]);
    }
    void pushdown(int rt,int L,int R){
        int lc=rt<<1,rc=rt<<1|1;
        int M=(L+R)/2;
        if(Set[rt]>=0){
            Set[lc]=Set[rc]=Set[rt];
            add[lc]=add[rc]=0;
            Max[lc]=Max[rc]=Min[lc]=Min[rc]=Set[rt];
            Sum[lc]=(M-L+1)*Set[rt];
            Sum[rc]=(R-M)*Set[rt];
            Set[rt]=-1;
        }
        if(add[rt]){
            add[lc]+=add[rt];
            add[rc]+=add[rt];
            Max[lc]+=add[rt];Min[lc]+=add[rt];
            Max[rc]+=add[rt];Min[rc]+=add[rt];
            Sum[lc]+=add[rt]*(M-L+1);
            Sum[rc]+=add[rt]*(R-M);
            add[rt]=0;
        }
    }
    void update(int rt,int L,int R,int v){
        int lc=rt<<1,rc=rt<<1|1;
        int M=(L+R)/2;
        if(y1<=L&&y2>=R){
            if(op==1){
                add[rt]+=v;
                Sum[rt]+=v*(R-L+1);
                Max[rt]+=v;
                Min[rt]+=v;
            }
            else {
                Set[rt]=v;
                add[rt]=0;
                Max[rt]=Min[rt]=v;
                Sum[rt]=v*(R-L+1);
            }
        }
        else{
            pushdown(rt,L,R);
            if(y1<=M) update(lc,L,M,v);
            if(y2>M) update(rc,M+1,R,v);
            pushup(rt);
        }
    }
    void Query(int rt,int L,int R){
        int lc=rt<<1,rc=rt<<1|1;
        int M=(L+R)/2;
        if(y1<=L&&y2>=R){
            sumr+=Sum[rt];
            maxr=max(maxr,Max[rt]);
            minr=min(minr,Min[rt]);
            return;
        }
        else {
            pushdown(rt,L,R);
            if(y1<=M){
                Query(lc,L,M);
            }
            if(y2>M) Query(rc,M+1,R);
            pushup(rt);
        }
    }
}T[25];
int R,C,M;
int main(){
    while(~scanf("%d%d%d",&R,&C,&M)){
        for(int i=1;i<=R;i++){
            T[i].init();
        }
        int op,x1,x2,y1,y2,v;
        for(int i=1;i<=M;i++){
            scanf("%d",&op);
            if(op<3){
                scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);
                for(int i=x1;i<=x2;i++){
                    T[i].y1=y1;T[i].y2=y2;T[i].op=op;
                    T[i].update(1,1,C,v);
                }
            }
            else{
                scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                int rmin=INF,rmax=-INF,rsum=0;
                for(int i=x1;i<=x2;i++){
                    T[i].minr=INF;T[i].maxr=-INF;T[i].sumr=0;
                    T[i].y1=y1;T[i].y2=y2;
                    T[i].Query(1,1,C);
                    rmin=min(rmin,T[i].minr);
                    rmax=max(rmax,T[i].maxr);
                    rsum+=T[i].sumr;
                }
                printf("%d %d %d\n",rsum,rmin,rmax);
            }
        }
    }
    return 0;
}
/*
 3 3 111
 1 1 1 1 1 1
 3 1 1 1 1
 2 1 1 2 2 0
 3 1 1 1 1
 */


从Si3N4到SiNx:一文搞懂芯片制造中氮化硅的化学式玄机(附工艺参数影响) 本文深入探讨了芯片制造中氮化硅(SiNx)化学式的调控艺术,揭示了从Si3N4到SiNx的转变如何影响材料性能。通过分析PECVD和PVD工艺参数对x值的精确调控,以及x值对电学和机械性能的影响,为半导体制造提供了实用的工艺优化策略。 阅读详情

相关推荐

聚类教程:cisTopic——来自单细胞表观基因组学数据的顺式调控主题的概率建模

之前运行这步的时候报错了如下: 后来发现原因是Ubuntu自动把R包更新到4.2版本,但是Rstudio版本没有更新,更新Rstudio即可,更新Rstudio的教程看此教程:。

watermel__的博客 1051

UVA 11992 Fast Matrix Operations 线段树

UVA 11992有一个r行c列的全0矩阵,查询个数是m,支持一下3种操作,op x1 y1 x2 y2 v,op=1时子矩阵全部加v,op=2时子矩阵全部设为v,op=3时求子矩阵的元素和以及最小值,最大值。因为题目说了矩阵不超过20行且元素总和不超过1e6,可以把二维化一维,x1 y1到x1 y2可以换成 (x1-1)*c+y1到 (x1-1)*c+y2接下来就是套用刘汝佳的模板了,因为一个细...

ccsu_cat 318

SpringBoot+Flowable 6.8.0实战:5分钟搞定免登录流程图设计器

本文详细介绍了如何通过SpringBoot与Flowable 6.8.0深度整合,快速实现免登录流程图设计器的集成方案。通过排除默认安全配置、自定义安全策略和用户模拟服务,开发者可在5分钟内完成设计器的部署,适用于快速原型开发和企业内部工具搭建。

weixin_29204205的博客 280

uva11992 Fast Matrix Operations 线段树打标记

现在想起来自己好像从来都没有写过线段树lazy tag呢,唉真是惭愧。现在老师开始讲线段树了,我就被要求滚去写线段树啦。。        这道题就是区间都加上一个值;区间都变为一个值;求区间和,最大值,最小值。其中行数 AC代码如下: #include #include #include #define N 500005 #define inf 1000000000 using namesp

lych的博客 606

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

SAP 公司间采购简介

SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。

我小时候很黑的博客 1379

Uva 11992 Fast Matrix Operations 【线段树】【双标记pushdown】

#include&lt;bits/stdc++.h&gt; using namespace std; #define lson rt &lt;&lt; 1, l, mid #define rson rt &lt;&lt; 1 | 1, mid + 1, r const int MAX = 1e5 + 7; const int INF = 0x3f3f3f3f; struct node{ ...

Head_Hard的博客 250

Android15音频进阶之解underrun与overrun思路(一百一十七)

本篇目的:Android15音频进阶之解underrun与overrun思路Underrun:发生在播放:APP准备的数据太少,导致底层没有音频数据可以播放,导致ADSP被“饿死了“,即Underrun。Overrun: 发声在录音:APP录音数据获取太慢了,导致底层录出来的数据太多了,APP播放不了,导致APP被“撑死了”,即Overrun。

Android系统攻城狮 2106

UVA 11992 Fast Matrix Operations(线段树+延迟标记)

这里是对区间的修改,所以需要延迟标记,否则每次修改时间复杂度将会是O(n),会超时。 #include #include #include #include using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) const int maxnode=(1<<17)

qq_33901573的博客 246

LLaMA Factory多卡微调的实战教程(持续更新)

本文主要介绍了LLaMA Factory多卡微调的实战教程(持续更新),希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 模型选型与下载 2.4 配置多卡环境 3. 运行代码 3.1 构建训练数据 3.2 修改配置文件 3.3 微调 3.3.1 zero3微调 3.3.2 启动API 3.3.3 模型测试

herosunly的博客 25万+

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

UVA - 11992 Fast Matrix Operations (线段树 + 懒标记)

对于每一个查询和修改x1,x2,y1,y2,我们分别对每一行的线段树处理就行;(3).再考虑打懒标记时要怎么维护?(这个懒标记是没有后效性的!区间变成一个数,区间+一个数,区间查询最值和矩阵和?(1)pushup时这个简单,区间和,区间最值。这个我们看一下数据范围,矩阵最多只有20行;(2).直接考虑pushdown怎么维护?对于每一行开一个线段树,分别维护就行;其实这个题之前写过了《迪拜的超市》那我们就不用二维线段树了;...

qq_53398102的博客 158

YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块,我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个类别的数据集,其在轻量网络结构的同时,却能够提高一定的mAP精度,所以这是一种十分高效的模块,该网络结构非常适合那些模型精度已经无法提到,想要从轻量化模型的角度入手的读者使用。欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 6095

(线段树两个lazy标记需要设定优先级)UVA 11992 - Fast Matrix Operations

题意: 一个n*m的矩阵,最多20行,元素总数量不超过1000000,三种操作,子矩阵+v,子矩阵=v,还有查询子矩阵的(最大值,最小值,和)。 分析: 显然需要懒惰标记,而且需要两个,一个lazy表示赋值的标记,一个add表示增加的标记。 而且需要优先级,显然赋值的优先级比增加高。 因为如果节点上有add,但是这时候lazy的标记push_down下来,显然过去的已经全都作废...

dijieluan7764的博客 177

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

UVA 11992 Fast Matrix Operations

题目链接:UVA 11992 Fast Matrix Operations 分析: 其实这题只用把矩阵完全看成一维的一排数,开一个数组建一个线段树,就行了。然而我却傻傻的每行开了一个线段树,代码有点丑,不要在意。 主要是set操作和Add操作之间的关系要搞清楚。 因为始终是先处理set再处理add,所以set标记传递的时候必须把add标记改为0(代码中有注释),这里很容易忘掉,

INCINCIBLE的博客 499

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UVA11992 Fast Matrix Operations

线段树 区间增加+区间覆盖

a free man 630

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

UVA 11992 Fast Matrix Operations

每一行都建一个线段树。。。。 Fast Matrix Operations There is a matrix containing at most 106 elements divided into r rows and c columns. Each element has a location (x,y) where 1 1 x1 y1 x2 y2 v

码代码的猿猿 1239

UVA - 11992——Fast Matrix Operations(线段树)

题目链接:https://cn.vjudge.net/problem/UVA-11992 思路:把二维当成一维,每次查询或者操作x1,y1,x2,y3区域的时候都分成处理x2-x1+1个小段,每一段处理y1~y2这个区间。 #include<string.h> #include<stdio.h> #include<algorithm> using name...

creator平 227

Fast Matrix Operations UVA 11992-线段树

这个题属于线段树的一个入门题,对线段树了解之后可以用这个题练一练 题意: 有一个初始状态全为0的矩阵,一共有三个操作 1x1 y1 x2 y2 v:子矩阵(x1,y1,x2,y2)所有元素增加v add 2x1 y1 x2 y2 v:子矩阵(x1,y1,x2,y2)所有元素设为v ...

P19777的博客 222

uva 11992 Fast Matrix Operations

题目链接: uva 11992 Fast Matrix Operations 题目大意: 你有r∗c(r<=20,r∗c<=106)r*c(r<=20,r*c<=10^6)r∗c(r<=20,r∗c<=106)的数字矩阵,每次可以将(x1,y1)(x2,y2)(x_1,y_1)(x_2,y_2)(x1​,y1​)(x2​,y2​)之间的数字加一个值,或将(x1,y1)(x2,y2)(x_1,y_1)(x_2,y_2)(x1​,y1​)(x2​,y2​)之间的数字改为一个值

lycccccccc的博客 182

Uva 11992 Fast Matrix Operations (二维线段树)

Fast Matrix Operations 题意: 给定一个r  op1: 子矩阵元素全部增加v  op2: 子矩阵元素全部变成v  op3: 查询子矩阵的元素和, 最小值, 最大值 分析: 二维线段树裸题啦~ 这个题对于回复状态非常不错哒, 几乎包含了一般线段树的所有情况  要注意一下push_down的时候    setv的优先级大于addv    然后setv之后要

TaoSama's Microcosm 724

UVA11992:Fast Matrix Operations(线段树)

题意: 有一个初始状态全为0的矩阵,一共有三个操作 1 x1 y1 x2 y2 v:子矩阵(x1,y1,x2,y2)所有元素增加v 2 x1 y1 x2 y2 v:子矩阵(x1,y1,x2,y2)所有元素设为v 3 x1 y1 x2 y2 v:查询子矩阵(x1,y1,x2,y2)的元素和,最大值和最小值 思路: 因为总元素葛素不超过10^6,而且更新是对于连续的行进行更新,

ACM!荣耀之路! 1782

UVA11992 - Fast Matrix Operations(线段树区间修改)

UVA11992 - Fast Matrix Operations(线段树区间修改) 题目链接 题目大意:给你个r*c的矩阵,初始化为0。 然后给你三种操作: 1 x1, y1, x2, y2, v 把由x1,y1, x2, y2构成的子矩阵里的每个元素都加上v。 2 x1, y1, x2, y2, v 把这个子矩阵的每个元素都修改为v。 3 x1, y1, x2, y2 查询

1205

uva11992 Fast Matrix Operations (线段树)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18697 题意:给定N*M的矩阵,初始值为0。有三种操作①将x1~x2行的y1~y2列的值加v(v>0)②将x1~x2行的y1~y2列的值改为v(v>0)③查询x1~x2行的y1~y2列里面的所有值的和,以及其中的最小值和最大值。(N 分析:由于N 开始的版

w20810的专栏 505

uva11992 - Fast Matrix Operations(含线段树模板)

线段树裸题

ACoder 171

UVA 11992 - Fast Matrix Operations(线段树)

UVA 11992 - Fast Matrix Operations 题目链接 题意:给定一个矩阵,3种操作,在一个矩阵中添加值a,设置值a,查询和 思路:由于最多20列,所以完全可以当作20个线段树来做,然后线段树是区间修改区间查询,利用延迟操作,开两个延迟值一个存放set操作,一个存放add操作 代码: #include #include #include

Remilia's 1589
上一篇: UVa 11235 Frequent Values(RMQ,ST算法)
下一篇: Uva 11732 "strcmp()" Anyone? (字典树)
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值