BZOJ 3211【线段树】
题意:
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【线段树】的更多相关文章
- bzoj 3211 线段树
开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...
- BZOJ 3211 线段树+并查集
思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了 //By SiriusRen #include <cmath> ...
- BZOJ 1798 (线段树||分块)的标记合并
我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...
- bzoj 3999 线段树区间提取 有序链剖
看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...
- bzoj 1018 线段树维护连通性
本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...
- bzoj 3212 线段树
裸的线段树 /************************************************************** Problem: User: BLADEVIL Langua ...
- bzoj 2120 线段树套平衡树
先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...
- bzoj 1901 线段树套平衡树+二分答案查询
我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...
- BZOJ 1012 线段树||单调队列
非常裸的线段树 || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...
- BZOJ 3681 线段树合并+网络流
思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...
随机推荐
- AJAX+json+jquery实现预加载瀑布流布局
宽度是一定的高度不定的瀑布流布局 也可以说是无缝拼图 当浏览器滚动到底部时候自动加载图片 加载的图片地址用json 在img.js里 ,还有正在加载动画是用 css3制作的 在ff等支持css3可以显 ...
- 第一章 走进Python
目标 了解Python的历史 了解Python的特征 了解Python的应用 掌握Linux下Python开发环境的搭建 理解Windows下Python环境搭建 案例 安装Python,写出第一个P ...
- Android: 一个两点触控的案例
下面是一个两点触控的案例代码: package com.zzj; import android.app.Activity; import android.os.Bundle; import andro ...
- C语言小程序(一)、判断三角型类型
最近回炉重造C语言,陆续写一些比较短的代码,选择其中的一些贴到这里,都是在Linux下的代码,Windows未测试. 第一个判断三角形的类型,两个浮点型数据不能直接判断相等,为了输入方便一些,自己设置 ...
- bzoj 3280: 小R的烦恼 费用流
题目: Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项 ...
- bzoj 2632 [ neerc 2011 ] Gcd guessing game —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2632 官方题解:http://neerc.ifmo.ru/archive/2011/neer ...
- C#某月的第一天和最后一天
1.本月的第一天===>DateTime.Now.AddDays(1 - DateTime.Now.Day);//当前日期减去当前日期和本月一号相差天数 2.本月的最后一天===>Date ...
- PHP7三元运算符 ?? 和 ?: 的区别
1. (expr1) ?? (expr2) 是 PHP7才有的功能,等同于: isset(expr1) ? expr1 : expr2 ; 2.(expr1) ?: (expr2) 是PHP5.3才 ...
- windows linux 使用python执行系统命令并将结果保存到变量
最近需要用到os.system 发现不能赋值到变量 后查有更新的模块,如下: os.system os.spawn* os.popen* popen2.* commands.* 重新使用content ...
- 修改sharepoint列表样式
1.将sharepoint 的样式修改为阴影 2.用designer打开列表的AllItems.aspx文件,将下面的样式拷贝到里面 <style type="text/css ...