UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)

  和普通的线段树不同的是,查询x~y的话,给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍。

  思路的话,就是关于query和pushup的方法。用一个新的变量sum记录一下这个区间里面按照答案给出的方式的值,比如说,这个节点的区间是1~3,那么这个节点的sum值就是(1*val[1]+2*val[2]+3*val[3])。那么对于pushup操作,当前这个节点的sum值是左边的sum值+左边的区间长度*右边的c值(c值代表的是这个区间的所有元素的和)+右边的sum值。这样的话就相当于右边的sum升高了需要的高度,就满足题意了。

  另外关于query也是类似,要返回时,加上(l-ql)倍的c[o]的值就行了,这样就相当于右边的sum升高了(l-ql)的高度了。如果不能理解,可以手动模拟一下试试。

  但是这题WA了好多次,,因为我现在才知道原来uva的long long得用lld,QAQ。。。

  具体见代码:

 

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #define t_mid (l+r>>1)
 5 #define ls o<<1
 6 #define rs o<<1 | 1
 7 #define lson ls,l,t_mid
 8 #define rson rs,t_mid+1,r
 9 using namespace std;
10 typedef long long ll;
11 
12 const int N = 100000 + 5;
13 ll c[N<<2],sum[N<<2],add[N<<2];
14 
15 void pushup(int o,int len){c[o]=c[ls]+c[rs];sum[o]=sum[ls]+c[rs]*len+sum[rs];}
16 
17 void build(int o,int l,int r)
18 {
19     add[o]=0;
20     if(l==r) {c[o]=sum[o]=100;return;}
21     build(lson);
22     build(rson);
23     pushup(o,t_mid-l+1);
24 }
25 
26 void pushdown(int o,int len)
27 {
28     if(add[o])
29     {
30         int llen=(len-(len>>1)),rlen=(len>>1);
31         add[ls] += add[o];
32         add[rs] += add[o];
33         c[ls] += add[o]*llen;
34         c[rs] += add[o]*rlen;
35         sum[ls] += add[o]*(llen)*(llen+1)/2;
36         sum[rs] += add[o]*(rlen)*(rlen+1)/2;
37         add[o]=0;
38     }
39 }
40 
41 void update(int o,int l,int r,int ql,int qr,int dt)
42 {
43     if(ql <= l && qr >= r)
44     {
45         add[o] += (ll)dt;
46         c[o] += (ll)dt*(r-l+1);
47         sum[o] += (ll)dt*(r-l+1)*(r-l+2)/2;
48         return;
49     }
50     pushdown(o,r-l+1);
51     if(ql <= t_mid) update(lson,ql,qr,dt);
52     if(qr >t_mid) update(rson,ql,qr,dt);
53     pushup(o,t_mid-l+1);
54 }
55 
56 ll query(int o,int l,int r,int ql,int qr)
57 {
58     if(ql <= l && qr >= r)
59     {
60         return (l-ql)*c[o]+sum[o];
61     }
62     pushdown(o,r-l+1);
63     ll res = 0;
64     if(ql <= t_mid) res += query(lson,ql,qr);
65     if(qr > t_mid) res += query(rson,ql,qr);
66     return res;
67 }
68 
69 int main()
70 {
71     int T;
72     scanf("%d",&T);
73     for(int kase=1;kase<=T;kase++)
74     {
75         printf("Case %d:\n",kase);
76         int n,m;
77         scanf("%d%d",&n,&m);
78         build(1,1,n);
79 
80         while(m--)
81         {
82             char s[10];
83             scanf("%s",s);
84             if(s[0]=='c')
85             {
86                 int x,y,dt;
87                 scanf("%d%d%d",&x,&y,&dt);
88                 update(1,1,n,x,y,dt);
89             }
90             else
91             {
92                 int x,y;
93                 scanf("%d%d",&x,&y);
94                 printf("%lld\n",query(1,1,n,x,y));
95             }
96         }
97     }
98 }

 

转载于:https://www.cnblogs.com/zzyDS/p/5649009.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gdb ldexp_带有Python示例的math.ldexp()方法

gdb ldexpPython math.ldexp()方法 (Python math.ldexp() method) math.ldexp() method is a library method of math module, it is used to calculate expression x*(2**i), where x is a mantissa and i is an exponent. It accepts two numbers (x is either float or inte…

windows安装包删了会有影响吗_win7系统删除系统更新安装包的详细教程

win7系统使用久了&#xff0c;好多网友反馈说win7系统删除系统更新安装包的问题&#xff0c;非常不方便。有什么办法可以永久解决win7系统删除系统更新安装包的问题&#xff0c;面对win7系统删除系统更新安装包的图文步骤非常简单&#xff0c;只需要1.其实在win7旗舰版系统中&a…

解压android img文件怎么打开,解压压缩android img文件

boot.imgboot和recovery映像并不是一个完整的文件系统&#xff0c;它们是一种android自定义的文件格式&#xff0c;该格式包括了2K的文件头&#xff0c;后面紧跟着是用gzip压缩过的内核&#xff0c;再后面是一个ramdisk内存盘&#xff0c;ramdisk映像是一个最基础的小型文件系统…

Java String 学习笔记 (一)

2019独角兽企业重金招聘Python工程师标准>>> ###String 简介 String 并非java的8大基本数据类型之一。 java中基本数据类型存储在栈内存中。而String不是&#xff0c;新new的String 对象存储在堆内存中。而字符串存储在常量池中。String对象的引用存储中栈内存中。 …

tau nb_math.tau常数,带Python示例

tau nbPython math.tau常数 (Python math.tau constant) math.tau constant is a predefined constant, which is defined in math module, it returns the value of mathematical constant "τ" (Tau), the value is 6.283185307179586 math.tau常数是在数学模块中定…

pcl画圆球_PCL之轨迹绘制(二)

之前学习点云库做一些简单的应用都是直接复制demo的代码&#xff0c;然后把导入文件改一下&#xff0c;今天尝试自己写一些程序&#xff0c;结果错漏百出&#xff0c;难受的早上&#xff0c;不过坚持了下来&#xff0c;求夸&#xff5e;&#xff5e;&#xff5e;这个主要是一个…

note2 android4.3,玩家们动手吧 Note2安卓4.3固件已泄漏

【PConline 资讯】最近各个牌子的安卓机迎来了升级安卓4.3的大潮&#xff0c;现在三星Galaxy Note2的安卓4.3固件已经泄漏出来了。实际上&#xff0c;此前三星官方已经确认&#xff0c;Galaxy Note3可以获得官方的安卓4.3固件升级&#xff0c;但具体日期没有确定&#xff0c;只…

SDP学习笔记

一、SDP规范了回话描述的格式&#xff0c;一般结合会话协议共同工作。 常见的会话传送协议包括:SAP(Session Announcement Protocol 会话公告协议),SIP,RTSP,HTTP,和使用MIME的E-Mail。 &#xff08;PS&#xff1a;对SAP只能包含一个会话描述,其它会话协议的SDP可包含多个会话描…

sinh_带有Python示例的math.sinh()方法

sinhPython math.sinh()方法 (Python math.sinh() method) math.sinh() method is a library method of math module, it is used to get the hyperbolic sine of given number in radians, it accepts a number and returns hyperbolic sine. math.sinh()方法是数学模块的库方…

android serviceconnection unbind流程,Android unbindService 流程分析

基于Android 6.0的源码剖析&#xff0c; 分析bind service的启动流程。/frameworks/base/core/java/android/app/ContextImpl.java/frameworks/base/core/java/android/app/LoadedApk.java/frameworks/base/core/java/android/app/IServiceConnection.aidl(自动生成Binder两端)…

【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题

今天是用JUnit测试一段代码&#xff0c;报错method initializationerror not found:&#xff1a;出现如下问题&#xff1a; 双击这个就显示出现如下的错误&#xff1a; 查询网上&#xff0c;说是junit版本的问题&#xff1a; 那我就不使用JUnit这个Libernary了&#xff0c;下载…

flash 不显示 旋转 补间动画_【图片】Flash入门5:详解制作补间动画(非传统补间)【flash软件吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼●●关于补间动画●●●1、准备事项注意&#xff1a;像 Flash 中的大多数内容一样&#xff0c;动画不需要任何 ActionScript。然而&#xff0c;如果您愿意&#xff0c;您可以使用 ActionScript 创建动画。在创建补间之前&#xff0…

math.ceil带小数点_Python中带有示例的math.ceil()方法

math.ceil带小数点Python math.ceil()方法 (Python math.ceil() method) math.ceil() method is a library method of math module, it is used to get the ceil value of a given number, it accepts a number/numeric expression and returns the smallest integral value wh…

将byte数组以html形式输出到页面,java 数组显示到html

java 数组显示到html[2021-02-05 01:08:54] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1a;…

JDK各版本新增的主要特性

JDK1.5新特性&#xff1a; 1.自动装箱与拆箱&#xff1a; 2.枚举 3.静态导入&#xff0c;如&#xff1a;import staticjava.lang.System.out 4.可变参数&#xff08;Varargs&#xff09; 5.内省&#xff08;Introspector&#xff09;&#xff0c;主要用于操作JavaBean中的属性&…

oracle 导入sql文件 汉字乱码_将现有的sql脚本导入 Oracle 数据库,中文乱码问题...

将现有的sql 脚本导入 Oracle数据库比如 在windows 系统下&#xff0c;可以写一个 bat 来实现直接导入如&#xff1a;bat 中的内容如下&#xff0c;logs.log 将会记录执行日志sqlplus user/passworddbname create.sql > logs.logcreate.sql 中的内容可以是需要执行的sql 语句…

html图片多边形怎么写,使用CSS3构建的图像多边形裁剪动画特效

CSS语言&#xff1a;CSSSCSS确定html {background: #333;}.polygon {-webkit-clip-path: polygon(50% 0%, 79.38926% 9.54915%, 97.55283% 34.54915%, 97.55283% 65.45085%, 79.38926% 90.45085%, 50% 100%, 20.61074% 90.45085%, 2.44717% 65.45085%, 2.44717% 34.54915%, 20.…

python函数示例_带Python示例的complex()函数

python函数示例Python complex()函数 (Python complex() function) complex() function is a library function in Python, it is used to get the complex number from given a real number or/and an imaginary number (which is an optional part), it accepts either a rea…

windows 下 git 禁用 CRLF 转换 LF

2019独角兽企业重金招聘Python工程师标准>>> windows中的换行符为 CRLF&#xff0c; 而在linux下的换行符为LF&#xff0c;所以在执行add . 时出现提示&#xff0c;解决办法&#xff1a; 删除根目录 .git 文件夹禁用自动转换 > git config --global core.autocrl…

cmd执行sql文件路径 oracle_oracle 基础 执行sql文件

Oracle执行外部文件&#xff1a;sql>new.sql执行多个sql文件:1.把所有的文件都放在同一个目录下&#xff0c;然后在命令行里执行命令&#xff1a;c:>dir/b > d:/1.sql会把所有的sql文件名都输出到一个sql文件中。2.用UltraEdit打开生成的sql文件&#xff0c;altC切换到…