题意:

T

N M

N个数

M个操作

一个数组A,

有3个操作

1 l r x,a[l]…a[r]都+x

2 l r,a[i]=sqrt(a[i]),l<=i<=r

3 l r,求和,a[i], l<=i<=r

操作3的时候输出

n,m(1<=n,m<=100000).

1<=A[i],x<=100000.

思路:

前言(读者可略过,看了请小喷qaq,欢迎指出错误):

我突然开始困惑复杂度的问题:

如果区间内所有的数都不相等,那么每次sqrt一下的时间复杂度多少?O(nlogn)?不是,翻书可知建树的时间复杂度是o(n)(因为节点数是2n),所以这里如果对区间所有数都sqrt一次也是o(n)啊。

那什么是O(logn),对于单值改变和区间查询是O(logn),因为复杂度只是树的深度。

正言:

以前写过一题hdu4027,也是线段树维护开方的,但是只有开方,我们都知道,在一定范围内开方没几次就是1了,这里不一样,这里还有加操作。。。这就不知道了。。。呜呜呜。。。

然后看了很多博客说是,某些区间内开几次就会变成1,然后标记一下区间是不是全部相等。。。

说实话,还是没怎么懂。。。

问题就是:

如果我就是数据是在一个大区间sqrt一下,然后再在这个大区间加一下,一直m次…那不是也就是时间复杂度爆炸么?

然后hdu上还加了一个毒数据(膜拜各种会玩dalao)。。

2 3 2 3 2 3 …

8 9 8 9 8 9 … (+6)

2 3 2 3 2 3 … (sqrt)

8 9 8 9 8 9 … (+6)

2 3 2 3 2 3 … (sqrt)

这个数据说明了我很可能办到这样不相等的情况,然后有了一个优化解法,原文:“可以发现区间内的极差>1的时候是不能办到这样的,只有整个区间内的极差<=1的时候,才能起到这种效果。所以我们就在线段树上再增加一些信息。就是最大值和最小值,最大值的个数,最小值的个数。这样的话,如果区间内的极差==1的时候,我们也能直接对整段进行操作。就能处理前面的这种样例了。”(感觉有点想特判…勿喷qaq);

其实都到这份上,这道题目再讲下去对于自己的水平也没有意义了。。。

这道题目的好:

1.对于线段树区间元素的表示,以及完美地利用线段树的性质达到一种处理,都是非常棒的。

2.这道题目的lazy操作也是很赞啊。query求sum以及更新操作的加都是一般可以解决,更新加操作需要一个lazy,然后标记某段区间是否相等,也要用到一个lazy。。对于lazy操作的写法,没写过很多很多题也是写不出来的。这题要想靠自己A掉,还要时间啊。先把基础搞好吧。

暂时放弃。

2016多校8th 1008【线段树-神题】的更多相关文章

  1. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  2. hdu-1540线段树刷题

    title: hdu-1540线段树刷题 date: 2018-10-18 19:55:21 tags: acm 刷题 categories: ACM-线段树 概述 哇,,,这道线段树的题可以说是到目 ...

  3. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  4. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  5. hdu-5023线段树刷题

    title: hdu-5023线段树刷题 date: 2018-10-18 13:32:13 tags: acm 刷题 categories: ACM-线段树 概述 这道题和上次做的那道染色问题一样, ...

  6. poj-2777线段树刷题

    title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...

  7. zoj-1610线段树刷题

    title: zoj-1610线段树刷题 date: 2018-10-16 16:49:47 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道简单的线段树区间染色问 ...

  8. Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题

    http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...

  9. hdu 1754 I Hate It 线段树基础题

    Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...

随机推荐

  1. PCA主成分分析Python实现

    作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...

  2. opencms 安装出现以下的问题:Your &#39;max_allowed_packet&#39; variable is set to less than 16777216 Byte (16MB).

    一.问题 在安装opencms是会出现例如以下错误: MySQL system variable 'max_allowed_packet' is set to 1048576 Byte (1MB). ...

  3. nginx-伤心的事

    今天测试接口,总是出问题,测试了两天,整个流程就卡在最后一步. 每次采用curl,request等请求访问我的服务器都会返回403状态码,网上找了很多资料 有权限的,有静态文件的,然而很多都没有什么卵 ...

  4. (转)typedef用法

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  5. 面向对象五大原则_1.单一职责原则&amp;2.里氏替换原则

    单一职责原则:Single Responsibility Principle (SRP) 一个类.仅仅有一个引起它变化的原因.应该仅仅有一个职责.每个职责都是变化的一个轴线.假设一个类有一个以上的职责 ...

  6. Python开发【迭代器】

    1.迭代器 1.1.迭代器创建:指定数据创建迭代器(使用iter()和next() ) x = [1, 2, 3] #定义一个列表:<class 'list'> y = iter(x) # ...

  7. 在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  8. 设计模式学习笔记——Prototype原型模式

    原型模型就是克隆. 还有深克隆.浅克隆,一切听上去都那么耳熟能详.

  9. python day- 5 字典(dic)的 增删改查 及 操作方法

    字典(dic) 1.定义及格式 用{ }大括号括起来的,由key:value 来保存数据的就是 字典(dic) eg:dic = {"及时雨" : "宋江" , ...

  10. java中方法中声明三个点“...”作用

    public class Test {  public static void main(String[] args) {   String str[] = {"s"," ...