当前位置: 首页 > 编程日记 > 正文

【UVA】11992 - Fast Matrix Operations(段树模板)

主体段树,要注意,因为有set和add操作,当慵懒的标志下推。递归优先set,后复发add,每次运行set行动add马克清0

WA了好几次是由于计算那一段的时候出问题了,可笑的是我对着模板找了一个多小时的错。

#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
#define lson pos << 1
#define rson pos << 1|1
typedef unsigned long long ULL;
typedef long long LL;
const int maxn = 1111111;
const int  INF = 1 << 30;
struct Node{int left,right;int max_value,min_value,sum_value;int col;int col2;
}tr[maxn << 2];
struct Ans{int min_value;int max_value;int sum_value;Ans(int a = INF,int b = 0,int c = 0):min_value(a),max_value(b),sum_value(c){};
};
int n,m,k;
void pushdown(int pos){if(tr[pos].col){int len1 = tr[lson].right - tr[lson].left + 1;int len2 = tr[rson].right - tr[rson].left + 1;tr[lson].sum_value += (tr[pos].col * len1);tr[lson].max_value +=  tr[pos].col;tr[lson].min_value +=  tr[pos].col;tr[rson].sum_value += (tr[pos].col * len2);tr[rson].max_value +=  tr[pos].col;tr[rson].min_value +=  tr[pos].col;tr[lson].col += tr[pos].col;tr[rson].col += tr[pos].col;tr[pos].col = 0;}return ;
}
void pushdown2(int pos){if(tr[pos].col2 >= 0){int len1 = tr[lson].right - tr[lson].left + 1;int len2 = tr[rson].right - tr[rson].left + 1;tr[lson].sum_value = (tr[pos].col2 * len1);tr[lson].max_value =  tr[pos].col2;tr[lson].min_value =  tr[pos].col2;tr[rson].sum_value = (tr[pos].col2 * len2);tr[rson].max_value =  tr[pos].col2;tr[rson].min_value =  tr[pos].col2;tr[lson].col2 = tr[pos].col2; tr[lson].col = 0;  //set递推须要清空求和tr[rson].col2 = tr[pos].col2; tr[rson].col = 0;tr[pos].col2 = -1;}return ;
}
void pushup(int pos){tr[pos].sum_value = tr[lson].sum_value + tr[rson].sum_value;tr[pos].max_value = max(tr[lson].max_value,tr[rson].max_value);tr[pos].min_value = min(tr[lson].min_value,tr[rson].min_value);return ;
}
void BuildTree(int L,int R,int pos){tr[pos].left = L; tr[pos].right = R; tr[pos].col = 0;tr[pos].col2 = -1;tr[pos].max_value = 0; tr[pos].min_value = 0; tr[pos].sum_value = 0;if(L == R) return ;int m = (L + R) >> 1;BuildTree(L,m,lson);BuildTree(m + 1,R,rson);return ;
}
void TreeAdd(int l,int r,int add,int pos){if(l <= tr[pos].left && tr[pos].right <= r){int len = tr[pos].right - tr[pos].left + 1;tr[pos].max_value += add; tr[pos].min_value += add;tr[pos].sum_value += (add * len); tr[pos].col += add;return ;}pushdown2(pos);pushdown(pos);int m = (tr[pos].left + tr[pos].right) >> 1;if(l <= m)TreeAdd(l,r,add,lson);if(r  > m)TreeAdd(l,r,add,rson);pushup(pos);
}
void TreeSet(int l,int r,int value,int pos){if(l <= tr[pos].left && tr[pos].right <= r){int len = tr[pos].right - tr[pos].left + 1;tr[pos].max_value = value; tr[pos].min_value = value;tr[pos].sum_value = (value * len); tr[pos].col2 = value;tr[pos].col = 0;return ;}pushdown2(pos);pushdown(pos);int m = (tr[pos].left + tr[pos].right) >> 1;if(l <= m)TreeSet(l,r,value,lson);if(r  > m)TreeSet(l,r,value,rson);pushup(pos);
}
Ans Query(int l,int r,int pos){if(l <= tr[pos].left && tr[pos].right <= r){return Ans(tr[pos].min_value,tr[pos].max_value,tr[pos].sum_value);}pushdown2(pos);pushdown(pos);int m = (tr[pos].left + tr[pos].right) >> 1;Ans a,b;if(l <= m)a = Query(l,r,lson);if(r  > m)b = Query(l,r,rson);pushup(pos);return Ans(min(a.min_value,b.min_value),max(a.max_value,b.max_value),a.sum_value + b.sum_value);
}
int main(){while(scanf("%d%d%d",&n,&m,&k) != EOF){BuildTree(1,n * m,1);while(k--){int t;scanf("%d",&t);if(t == 1){int x1,y1,x2,y2,v;//addscanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);for(int i = x1 ; i <= x2 ; i++){int l = (i - 1) * m + y1;int r = (i - 1) * m + y2;TreeAdd(l,r,v,1);}}else if(t == 2){int x1,y1,x2,y2,v;//addscanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);for(int i = x1 ; i <= x2 ; i++){int l = (i - 1) * m + y1;int r = (i - 1) * m + y2;TreeSet(l,r,v,1);}}else if(t == 3){int x1,y1,x2,y2;Ans t;int MAX = 0,MIN = INF,SUM = 0;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);for(int i = x1 ; i <= x2 ; i++){int l = (i - 1) * m + y1;int r = (i - 1) * m + y2;t = Query(l,r,1);SUM += t.sum_value;MAX = max(MAX,t.max_value);MIN = min(MIN,t.min_value);}printf("%d %d %d\n",SUM,MIN,MAX);}}}return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4713382.html

相关文章:

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

问题概述使用阿里云rds for MySQL数据库&#xff08;就是MySQL5.6版本&#xff09;&#xff0c;有个用户上网记录表6个月的数据量近2000万&#xff0c;保留最近一年的数据量达到4000万&#xff0c;查询速度极慢&#xff0c;日常卡死。严重影响业务。 问题前提&#xff1a;老系统…

SQL Server 2008 下载地址(微软官方网站)

哪里有sqlserver2008下载&#xff1f;2011-9-24 23:58提问者&#xff1a;ooseestars | 浏览次数&#xff1a;3252次2011-9-26 11:38最佳答案SQL Server 2008 下载地址(微软官方网站) 中文版(3.28GB)&#xff1a;http://sqlserver.dlservice.microsoft.com/dl/download/B/8/0/B8…

java实现最长连续子序列_最长公共子序列 ||

问题&#xff1a;在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来&#xff0c;因为最长公共子序列可能不只一种。难点&#xff1a;输出一个最长公共子序列并不难&#xff0c;难点在于输出所有的最长公共子序列&#xff0c;我们需要在动态规划表上进…

替换元素和非替换元素的学习

替换元素和非替换元素的学习 (元素)[妙瞳] 引言 元素是文档结构的基础&#xff0c;在CSS中&#xff0c;每个元素生成了一个包含了元素内容的框&#xff08;box,也翻译为“盒子”&#xff09;。但是不同的元素显示的方式会有所不同&#xff0c;例如div和span不同&#xff0c;而s…

第十六天-企业应用架构模式-离线并发模式

1.乐观离线锁 &#xff08;Optimistic Offline Lock&#xff09; 运行机制 使用时机 例&#xff1a;领域层与数据层数据映射器 2.悲观离线锁 &#xff08;Pessimistic Offline Lock&#xff09; 运行机制 使用时机 例&#xff1a;简单锁管理对象 3.粗粒度锁 &#xff08;Coarse…

hdu1518 bjfuoj1042 zoj1909 poj2362 经典的搜索加剪枝

bjfuoj的测试数据最水&#xff0c;用很简单的方法一下就过了&#xff0c;又调了好长时间&#xff0c;才过掉其它OJ上的这道题目~ /* * hdu1518/win.cpp * Created on: 2011-11-8 * Author : ben*/#include <cstdio>#include <cstdlib>#include <cstring>#…

投影参数_智能投影仪参数如何去看,其实很简单

我又来给大家安利投影仪了&#xff0c;毕竟用过的都知道有多刺激&#xff0c;但是估计很多人看到参数就头疼了吧&#xff1f;所以话不多说&#xff0c;直接上科普啦流明亮度流明怎么算的&#xff0c;家人们就不用详细了解了&#xff0c;只用记住&#xff0c;流明越高画面就越亮…

zoj 3554 A Miser Boss

题意&#xff1a;有a、b、c三个人同时工作&#xff0c;三个人做不同的任务需要不同的时间&#xff0c;但最后要求三个人做事情的总时间相同&#xff0c;输出做完所有任务需要的最少时间&#xff0c;如果无法达到三个人总工作时间相同&#xff0c;则输出“No” 当时一股脑筋觉着…

二进制_Kubernetes集群二进制部署

一、环境规划操作系统&#xff1a;CentOS7.4_x64kubernetes安装目录&#xff1a;/opt/kubernetes版本说明&#xff1a;Kubernetes&#xff1a;v1.9Docker&#xff1a;v17.12.0-ceEtcd&#xff1a;3.1二、安装Docker在所有节点执行&#xff1a;setenforce 0iptables -Fiptables …

delphi对窗体的查询(delphi xe2)

1、显示所有窗口的标题 2、根据关键字查询窗口 3、某一窗口内的所有控件及其内容 . unit Unit1;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;typeTFo…

Buffer的工作方式

1、Buffer的工作方式  前面《java NIO的工作方式》介绍了Selector检测到通信信道I/O有数据传输时&#xff0c;通过select()方法取得SocketChannel&#xff0c;将数据读取或写入Buffer缓冲区&#xff0c;下面讨论Buffer如何接受和写出数据。通过查看JDK源码可知道&#xff0c;…

PHP 相关配置

2019独角兽企业重金招聘Python工程师标准>>> 1. php-fpm的pool 编辑php-fpm配置文件php-fpm.convim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容include etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vhost” 的配置 创建存放pool配置…

学生教育云平台登录入口_湖南省教育云平台登录入口

湖南省教育云平台官方网站http://www.hnzyzx.com/&#xff0c;好学网的中小学频道为学友整理。 湖南省教育网&#xff1a; 点击登录&#xff1a; 湖南省教育云平台登录系统 下方为湖南信息教育云平台登录入口图示&#xff1a;安全教育平台学生姓名错误处理方法…

flash中制的SWC组件怎样导入到flex中使用

flash中制的SWC组件怎样导入到flex中使用2010-04-30 11:18在使用FLASH导出SWC组件文件后&#xff0c;放入项目的LIB文件夹&#xff0c;然后要用实例化一个对象才能进行时操作使用&#xff0c; 但要记得的是&#xff0c;导出时候要再导出的组件处勾选链接&#xff0c;勾选为AS导…

开源智能手机 Librem 5 跳票了,推迟至第3季度发布

百度智能云 云生态狂欢季 热门云产品1折起>>> 由 Purism 公司打造的开源智能手机 Librem 5 原计划于2019年4月正式发布。但根据官方最新的消息&#xff0c;Librem 5 将推迟至2019年第3季度发货。 根据之前的消息&#xff0c;Librem 5 的预售价为 599 美元。 Librem …

js 获取URL后面的参数

1、有时间由于缓存问题&#xff0c;用PHP可能就不是太好处理&#xff0c;所以可以用客户端进行URL的处理 如下&#xff1a;js 获取URL后面的参数 <script> function getUrlParam(name) { //获取url参数 var reg new RegExp("(^|&)" name "([^&…

机械键盘恢复出厂fn_黑爵毛茸茸系列机械键盘评测

写在前面之前试用过黑爵的巧克力键盘&#xff0c;给我留下了挺不错的使用体验&#xff0c;不仅外观设计上好看&#xff0c;原厂Cherry轴体手感也不错&#xff0c;这次有幸体验到黑爵新品毛茸茸系列键盘实属荣幸。开箱学弟这次拿到的键盘是Cherry青轴&#xff0c;可能是快递有些…

centos防火墙端口配置

增加防火墙配置&#xff0c;允许8080端口&#xff1a; # vi /etc/sysconfig/iptables 在允许ssh的下面增加一条&#xff1a; -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT 保存&#xff0c;重启iptables服务 &#xff1a; # service iptables restart…

实时智能决策引擎在蚂蚁金服风险管理中的实践

摘要&#xff1a;以“数字金融新原力(The New Force of Digital Finance)”为主题&#xff0c;蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办。金融智能专场分论坛上&#xff0c;蚂蚁金服数据技术专家王修坤做了主题为《实时智能决策引擎在蚂蚁金服风险管理中的实践》的精彩…

JAVA如何检测GC日志

只需要在JAVA程序运行的时候&#xff0c;加上VM参数就可以。像下面这样: -XX:PrintGCDetails 更具体的请参考: http://flash520.blog.163.com/blog/static/34414475201063041157163/ 转载于:https://www.cnblogs.com/bestchenwu/archive/2011/11/26/9655409.html

eclipse c语言_如果你的电脑是windows7/10的环境,用什么编译器学习C语言好?

既然问题已经限制了Windows环境&#xff0c;那么就不再推荐Linux环境下的编译器了&#xff0c;虽然在Linux环境进行C语言的编程会比Windows可以更好的掌握一些基础知识&#xff0c;自己动手gcc,写makefile文件了解编译&#xff0c;链接的过程。下面对windows环境C语言开发IDE进…

Apache Tomcat 7.0.93 发布,开源 Java Web 应用服务器

Apache Tomcat 7.0.93 已发布&#xff0c;Tomcat 是 Java Servlet、JavaServer Pages、Java 表达式语言和 Java WebSocket 技术的开源实现&#xff0c;是一个免费的开放源代码的 Web 应用服务器。 与 7.0.92 相比&#xff0c;该版本包含许多 bug 修复和改进。有以下值得关注的变…

C# using 语法说明

using 关键字有两个主要用途&#xff1a; (一).作为指令&#xff0c;用于为命名空间创建别名或导入其他命名空间中定义的类型。 (二).作为语句&#xff0c;用于定义一个范围&#xff0c;在此范围的末尾将释放对象。using指令 ①允许在命名空间中使用类型&#xff0c;这样&…

多行表头_多行表头数据汇总你怎么操作?手动复制粘贴?OUT!用VBA1分钟完成

前景提要(文末提供源码下载)发现小伙伴们的数据结果真的好复杂&#xff0c;不昨天才分享过有多行表头的数据如何汇总合并&#xff0c;今天就有小伙伴反馈&#xff0c;他的数据虽然是有多行表头的&#xff0c;但是又有一些数据没有多行表头&#xff0c;那么在进行批量数据汇总的…

VirtualBox上Ubuntu 共享文件夹

1. virtualbox 菜单栏中设备--》共享文件夹&#xff0c;添加一个共享文件夹&#xff0c;比如共享文件夹路径是D:/share&#xff0c;共享文件夹名称是share。 2. 进入虚拟Ubuntu&#xff0c;在命令行终端输入&#xff1a; sudo mkdir /mnt/sharesudo mount -t vboxsf share /mnt…

tinyMCE

TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器&#xff0c;由JavaScript写成。它对IE6和Firefox1.5都有着非常良好的支持。 功能方面虽然不能称得上是最强&#xff0c;但绝对能够满足大部分网站的需求&#xff0c;并且功能配置灵活简单。另一特点是加载速度非常快&#x…

监管大屏系统_高速公路监管系统大屏可视化

0x00 项目背景该项目用于高速公路监管。高速公路监管包括&#xff1a;高速公路的设备运行情况&#xff0c;设备维护情况&#xff0c;道路维护情况&#xff1b;交通流量分析&#xff0c;交通拥堵分析&#xff0c;拥堵溯源&#xff1b;事故分析&#xff0c;事件信息发布等。0x01设…

Android(java)学习笔记96:layout_weight使用注意事项

1. android:layout_weight使用说明&#xff1a; layout_weight是权重的意思&#xff0c;也就是各个控件所占的比重&#xff0c;用在LinearLayout布局中。当我们使用layout_weight的时候&#xff0c;layout_width和layout_height有三种表示方法 2. android:layout_weight使用之 …

41.uniq命令

uniq命令&#xff1a; 选项&#xff1a;-c:显示每行的重复次数&#xff1b;-u:仅显示未曾重复过的行&#xff1b;-d:仅显示重复过的行&#xff1b; 实例&#xff1a; 转载于:https://blog.51cto.com/itxuezhe/2354162