题意:

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. Codeforces 429B Working out:dp【枚举交点】

    题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一 ...

  2. BZOJ 2243 [SDOI2011]染色:树剖【维护路径上颜色段】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2243 题意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径 ...

  3. 分享知识-快乐自己:运行(wordcount)案例

    运行 wordcount 案例: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce ...

  4. node.js+express+jade系列五:ajax登录

    本文通过jquery实现简单的无刷新登录 1:首先要在router中配置登录请求,因为登录需要传user和pwd考虑到安全需用post请求 {        path:'/',        meth ...

  5. C# 往excel出力数据

    /// <summary> /// 出力Excel /// </summary> /// <param name="storeModelForExcel&quo ...

  6. Quality

  7. Tomcat_异常_01_Setting property 'source' to 'org.eclipse.jst.jee.server:AWeiXin_QiYe_Demo' did not find a matching property

    关于解决方法: 1.解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题 2.eclipse中server location为灰色 ...

  8. OpenCV——百叶窗

    参考: PS 图像特效,百叶窗 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLU ...

  9. Agc016_D XOR Replace

    传送门 题目大意 给定两个长为$n$的序列$A,B$你可以进行若干组操作,每次操作选定一各位置$x$,令$A_x$等于$A$的异或和. 问能否通过一定操作使得$A$成为$B$,如果能,求最小操作书数. ...

  10. 点分治Day1

    树套树Day2暂且搁置...因为Day1的题我各种不会做... 唯一过了一道还是整体二分过的... 我们来一点愉快的算法,先不考虑数据结构这种骚东西了 毕竟还在发烧,就先码码这几天在搞的点分治吧 hx ...