[HDOJ4027]Can you answer these queries?(线段树,特殊成段更新,成段查询)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027

RT,该题要求每次更新是更新所有节点,分别求平方根,查询是求和。昨晚思前想后找有没有一个数学上的开平方的和等于和的开平方之类的规律。但是想了想发现这不就是小的时候,如果你这么想那老师就会骂死你的那个- -!

所以显然这个题是无法按套路成段更新了,懒惰标记也是没有用了,我们应该去按照区间更新每一个节点。结果TLE了一发,这说明这题不是这么搞,一定还有规律的。注意到题目给数据规模是2^63以及题目红字所述:开根号全都取下整,除了考虑用longlong以外,我们其实还可以想一下对一个longlong的数据开平方,最终都会变成1。那么在更新这个节点至1的那次update里,更新结束后一定会从叶子rt向上更新父亲,如果rt的兄弟节点也是1,那么说明rt的父亲已经不再需要更新了(因为1开平方还是1),这时候rt的父亲存的结果是1+1=2。也就是(rt+1-rt+1)。推广到更高的节点,换成区间来表示就是(r-l+1)。我们遇到这种节点就不需要更新了。

特别需要注意的是题目中x和y的大小…会出现x>y的情况……以及,每个case最后都要有一个额外的\n…………(PE到死WA到死)

 

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19 
20 using namespace std;
21 
22 #define fr first
23 #define sc second
24 #define pb(a) push_back(a)
25 #define Rint(a) scanf("%d", &a)
26 #define Rll(a) scanf("%I64d", &a)
27 #define Rs(a) scanf("%s", a)
28 #define FRead() freopen("in", "r", stdin)
29 #define FWrite() freopen("out", "w", stdout)
30 #define Rep(i, len) for(LL i = 0; i < (len); i++)
31 #define For(i, a, len) for(LL i = (a); i < (len); i++)
32 #define Cls(a) memset((a), 0, sizeof(a))
33 #define Full(a) memset((a), 0x7f7f, sizeof(a))
34 
35 typedef long long LL;
36 #define lrt rt << 1
37 #define rrt rt << 1 | 1
38 const LL maxn = 100100;
39 LL sum[maxn<<2];
40 LL n, q;
41 
42 void pushUP(LL rt) {
43     sum[rt] = sum[lrt] + sum[rrt];
44 }
45 
46 void build(LL l, LL r, LL rt) {
47     if(l == r) {
48         Rll(sum[rt]);
49         return;
50     }
51     LL m = (l + r) >> 1;
52     build(l, m, lrt);
53     build(m+1, r, rrt);
54     pushUP(rt);
55 }
56 
57 void update(LL L, LL R, LL l, LL r, LL rt) {
58     if(sum[rt] == r - l + 1) return;
59     if(l == r) {
60         sum[rt] = LL(double(sqrt(sum[rt])));
61         return;
62     }
63     LL m = (l + r) >> 1;
64     if(m >= L) update(L, R, l, m, lrt);
65     if(m < R) update(L,R, m+1, r, rrt);
66     pushUP(rt);
67 }
68 
69 LL query(LL L, LL R, LL l, LL r, LL rt) {
70     if(l >= L && R >= r) return sum[rt];
71     LL m = (l + r) >> 1;
72     LL ret = 0;
73     if(m >= L) ret += query(L, R, l, m, lrt);
74     if(m < R) ret += query(L, R, m+1, r, rrt);
75     return ret;
76 }
77 
78 int main() {
79     // FRead();
80     LL orz = 1;
81     LL a, b, c;
82     while(~Rll(n)) {
83         Cls(sum);
84         printf("Case #%I64d:\n", orz++);
85         build(1, n, 1);
86         Rll(q);
87         while(q--) {
88             Rll(a); Rll(b); Rll(c);
89             if(b > c) swap(b, c);
90             if(a == 0) update(b, c, 1, n, 1);
91             if(a == 1) cout << query(b, c, 1, n, 1) << endl;
92         }
93         printf("\n");
94     }
95     return 0;
96 }

 

转载于:https://www.cnblogs.com/kirai/p/5497216.html

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

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

相关文章

msdn画圆弧函数_精确之美——用TikZ画硬盘示意图

序言备考某等级考试的时候&#xff0c;在教材中碰到了几个一直不太理解的、关于硬盘的概念&#xff1a;磁道、柱面号、扇区。然而教材没有配图&#xff0c;无法直观地了解这些概念的物理形态。维基百科的硬盘[1]词条页中倒是有一副不错的示意图&#xff0c;我截图搬运了过来机械…

爬虫:验证码识别准确率(Tesseract-OCR)

爬虫&#xff1a;验证码识别准确率&#xff08;Tesseract-OCR&#xff09; 现在的网站为了防止人们轻易的获取登陆后的页面信息&#xff0c;在登陆上设置了很多的障碍&#xff0c;验证码就是其中的一种&#xff0c;所谓道高一尺&#xff0c;魔高一丈&#xff0c;人们总能想出办…

【赠书】21世纪科技竞争的核心是超级智能的控制权

这篇文章是根据《崛起的超级智能&#xff1a;互联网大脑如何影响科技未来》的核心观点对21世纪世界科技竞争的判断。《崛起的超级智能》受到张亚勤、刘慈欣、周鸿祎、王飞跃、约翰.翰兹等专家的联合推荐。作者刘锋&#xff0c;2019年7月由中信出版社出版。《崛起的超级智能》主…

MATLAB中的微积分运算(数值符号)

显然这个函数是单词differential&#xff08;微分&#xff09;的简写&#xff0c;用于计算微分。实际上准确来说计算的是差商。 如果输入一个长度为n的一维向量&#xff0c;则该函数将会返回长度为n-1的向量&#xff0c;向量的值是原向量相邻元素的差&#xff0c;于是可以计算一…

电脑手写板_点到之处妙笔生花,实用平板电脑手写电容笔推荐

如今随着科技的不断发展&#xff0c;人们生活水平也在逐步地提升。除了手机以外&#xff0c;很多人都会给自己入手一款平板电脑。不管是观看电影还是游戏办公&#xff0c;大尺寸的屏幕都能带来更加清晰的视觉效果。而电容笔的出现&#xff0c;可以说跟平板电脑是一组巧妙的搭配…

图像处理:给验证码图片做降噪处理及数据清洗

上一篇博文&#xff1a;https://blog.csdn.net/qq_40962368/article/details/89312429 图像处理&#xff1a;给验证码图片做降噪处理及数据清洗 在上一篇博文中&#xff0c;tesseract对验证码识别的准确率还是非常低的&#xff0c;改进措施的话&#xff0c;可以从三个方面来考…

X-Brain:如此美丽可爱的大脑工作原理

这个帖子很好地提醒了我&#xff0c;为什么我愿意跟如此美丽可爱的大脑一起工作。因为真正的大脑非常不可爱&#xff0c;长得也难看。我们从外往里看吧。生物学有时似乎非常让人满意&#xff0c;比如你的头上有一个真正的俄罗斯套娃。你有头发&#xff0c;然后是头皮&#xff0…

freeswitch 发update sip消息_LeetCode LCP 05——发 LeetCoin

关键字&#xff1a;线段树归航return&#xff1a;(Trivial)LeetCode 1354——多次求和构造目标数组​zhuanlan.zhihu.com归航return&#xff1a;(Trivial) LeetCode 84—柱状图中最大的矩形​zhuanlan.zhihu.comProblem力扣决定给一个刷题团队发 LeetCoin 作为奖励。同时&#…

SpringMVC注解@RequestParam全面解析

在SpringMVC后台控制层获取参数的方式主要有两种&#xff0c;一种是request.getParameter("name")&#xff0c;另外一种是用注解RequestParam直接获取。这里主要讲这个注解 一、基本使用&#xff0c;获取提交的参数 后端代码&#xff1a; Java代码 RequestMapping(…

MATLAB(六)数据处理

一、Matlab中的默认数据文件mat文件 例1、把Matlab工作空间中的数据矩阵a、b、c保存到数据文件data1.mat中。 >> a [1, 2, 3] a 1 2 3 >> b [4, 5, 6] b 4 5 6 >> c [7, 8, 9] c 7 8 9 >> save data1 a b c 例2、把例1生…

java怎么安装_Windows、Linux、Mac下安装JDK

前言在知乎上看到很多童鞋在学Java的时候&#xff0c;因为安装jdk时没有正确的配置&#xff0c;会遇到很多问题。所以决定今天写一下jdk在Windows、Mac、Linux下都怎么安装。下载JDK“巧妇难为无米之炊”&#xff0c;所以首先我们要去Oracle官网上下载jdk&#xff0c;Java8下载…

200年历史的神经科学难题,取得重大突破

图片来源&#xff1a;Diogo Matias&#xff0c;Champalimaud基金会来源&#xff1a;中国生物技术网北京时间8月13日&#xff0c;发表在《Nature Neuroscience》上的一项研究&#xff0c;来自葡萄牙里斯本Champalimaud未知中心的研究团队解决了一个长达200年历史的神经科学难题。…

关系数据库SQL之可编程性触发器

前言 前面关系数据库SQL之可编程性函数&#xff08;用户自定义函数&#xff09;一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标&#xff0c;前文已介绍了函数、存储过程、事务&#xff0c;本文来介绍一下触发器的使用。(还是以前面的银行系统为例) 概…

图像处理:图像特效之油画效果

利用OpenCVpython对图片进行处理产生油画的效果 算法可以分为五步&#xff1a; 1、获取图像的灰度(gray)图片2、设计一个小方框&#xff08;4x4 or 8x8 or 10x10等&#xff09;&#xff0c;统计每个小方框的像素值3、将0-255的灰度值划分成几个等级&#xff0c;并把第二步处理…

socket模拟http的登陆_python模拟登陆知乎(最新版)

为啥要写这一篇文章呢&#xff1f;&#xff08;主要是qq群内有人在模拟登陆知乎&#xff0c;一直不成功&#xff09;然后我抓包看了下&#xff0c;发现知乎登陆页已经改版了&#xff0c;而且难度大大提高了。开始抓包首先内&#xff0c;还是打开知乎首页&#xff0c;然后输入账…

基于wrapper的特征选择——递归特征消除RFE的python实现

class sklearn.feature_selection.RFE(estimator, *, n_features_to_selectNone, step1, verbose0) https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?highlightrfe#sklearn.feature_selection.RFE estimator&#xff1a;用于特征选…

图像识别:利用KNN实现手写数字识别(mnist数据集)

图像识别&#xff1a;利用KNN实现手写数字识别&#xff08;mnist数据集&#xff09; 步骤&#xff1a; 1、数据的加载&#xff08;trainSize和testSize不要设置的太大&#xff09; 2、k值的设定&#xff08;不宜过大&#xff09; 3、KNN的核心&#xff1a;距离的计算 4、k个最近…

寻找数组中第K频繁的元素

问题是&#xff1a;给你一个数组&#xff0c;求解出现次数第K多的元素。当然leetcode上的要求是算法复杂度不能大于O(N*logN)。 首先这个问题我先是在leetcode上看到&#xff0c;当时想了两种做法&#xff0c;做到一半都觉得不是很好&#xff0c;正在思考别的方法。然后在牛客网…

一个与生命起源有关的悖论终于得到了解决

来源&#xff1a;原理当Caitlin Cornell低头看显微镜时&#xff0c;她看见黑色的背景下浮现出一些大大的明亮斑点。它们就像微缩的太阳&#xff0c;在深色的太空幕布下闪耀着光芒。Conell回忆起把这些斑点展示给她的导师Sarah Keller时的兴奋&#xff0c;那时她们意识到&#x…