题意:

n个数,m个操作。

1,L,R  询问[L , R] 的总和。

2,L,R  将区间所有数都开根号。

思路:

区间和简单。

主要就是一个 区间所有元素相同的标记Same ,但是这样是不是要求太高?

sqrt 好像就算是1e9,也down的非常快到1了,且这里还没有区间加。

so,只要考虑标记区间是否都是1/0就足够了。

水题。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10; struct Seg{
int Left,Right;
int Flag;
LL Sum;
}q[N*4]; void Build(int num,int Left,int Right){
q[num].Left=Left;q[num].Right=Right;
if(Left == Right){
scanf("%lld",&q[num].Sum);
if(q[num].Sum==0 || q[num].Sum==1)
q[num].Flag=1;
return;
}
int Mid=(Left+Right)>>1;
Build(num<<1,Left,Mid);
Build(num<<1|1,Mid+1,Right);
q[num].Sum=q[num<<1].Sum+q[num<<1|1].Sum;
q[num].Flag=q[num<<1].Flag&q[2*num|1].Flag;
} void Update(int num,int Left,int Right)
{
if(q[num].Flag) return;
if(q[num].Left==q[num].Right)
{
q[num].Sum=sqrt(q[num].Sum);
if(q[num].Sum==0||q[num].Sum==1) q[num].Flag=1;
return;
}
int Mid=(q[num].Left+q[num].Right)>>1;
if(Mid>=Right) Update(num<<1,Left,Right);
else if(Mid<Left) Update(num<<1|1,Left,Right);
else
{
Update(num<<1,Left,Mid);
Update(num<<1|1,Mid+1,Right);
}
q[num].Sum=q[num<<1].Sum+q[num<<1|1].Sum;
q[num].Flag=q[num<<1].Flag&q[num<<1|1].Flag;
} LL Query(int num,int Left,int Right)
{
if(q[num].Left>=Left && q[num].Right<=Right)
return q[num].Sum;
int Mid=(q[num].Left+q[num].Right)>>1;
if(Mid>=Right) return Query(num<<1,Left,Right);
else if(Mid<Left) return Query(num<<1|1,Left,Right);
else
return Query(num<<1,Left,Mid)+Query(num<<1|1,Mid+1,Right);
} int main()
{
int n,Q;
int op,Left,Right;
scanf("%d",&n);
Build(1,1,n);
scanf("%d",&Q);
while(Q--)
{
scanf("%d%d%d",&op,&Left,&Right);
switch(op){
case 1:printf("%lld\n",Query(1,Left,Right));break;
case 2:Update(1,Left,Right);break;
}
}
return 0;
}

BZOJ 3211【线段树】的更多相关文章

  1. bzoj 3211 线段树

    开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...

  2. BZOJ 3211 线段树+并查集

    思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了 //By SiriusRen #include <cmath> ...

  3. BZOJ 1798 (线段树||分块)的标记合并

    我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...

  4. bzoj 3999 线段树区间提取 有序链剖

    看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...

  5. bzoj 1018 线段树维护连通性

    本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...

  6. bzoj 3212 线段树

    裸的线段树 /************************************************************** Problem: User: BLADEVIL Langua ...

  7. bzoj 2120 线段树套平衡树

    先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...

  8. bzoj 1901 线段树套平衡树+二分答案查询

    我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...

  9. BZOJ 1012 线段树||单调队列

    非常裸的线段树  || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...

  10. BZOJ 3681 线段树合并+网络流

    思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...

随机推荐

  1. Http请求和响应

    Http请求和响应 Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式有具体的规定. 请求部分由三部分组成: Requset line:请求行,位于第一行 Req ...

  2. maven建ssh项目的pom文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. 十三 Django框架,CSRF跨站请求伪造

     全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...

  4. C#操作计划任务

    昨天有一个任务,就是要下载相关文件,然后保存在相关路径下,这个没什么难度,所以就略过不谈,主要谈谈定时下载,即每天某个固定时间执行下载,这个功能我是用C#代码来操作windows自带的任务计划来实现的 ...

  5. UI层自动化测试介绍

    UI指的是用户可以用肉眼可以看到的页面. UI层自动化测试的原理.不论是web端还是移动端,原理都是一样的,就是基于页面元素的识别和定位来进行模拟用户行为. 首先识别到某个元素,比如一个按钮,然后定义 ...

  6. OpenCV——黑白调整

    参考算法: 闲人阿发伯的博客 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUD ...

  7. POJ2774Long Long Message (后缀数组&后缀自动机)

    问题: The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to ...

  8. 通过 命令提示符(cmd.exe)连接 Oracle 数据库

    通过IP 连接数据库: sqlplus userName/userPassword@//IP:port/SID 例:sqlplus testuser/123456@//192.168.0.1:1521 ...

  9. 关于cin

    今天同学调试一个简单的程序的时候发现了问题,我们两个讨论的时候弄出了好多乐子 #include <iostream> using namespace std; int main() { ; ...

  10. 关于Android进程的启动和消亡

    在打开一个应用程序的时候,packagemanager会根据manifest文件去查找有没有相应的进程已启动,若果没有启动,那么就启动一个新的进程 进程退出有两种方式,用finish结束主activi ...