【BZOJ3038】上帝造题的七分钟2 线段树
根据一个数六次√必死,我们可以打标记死了就不管他了,于是有贡献的操作复杂度为O(n*logn*6),然而我们还有由于盲目修改造成的多余代价我们把每次查询的区间分成三部分前全死,中残,后全死,对于中残,我们的操作都是由于为了有价值的操作而操作的,(无论中间残的那里面断断续续的死的是多长,他的向下都是为了做出贡献),而两边的多余费用最多O(4*logn),最终约为O(10*n*logn)
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#define MAXN 100005
using namespace std;
typedef long long LL;
inline LL read_LL()
{
LL sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
struct Seg_Tree
{
Seg_Tree *ch[];
int over,l,r,mid;
LL sum;
}S[MAXN<<],*root;
LL key[MAXN];
int n,m;
int sz;
inline Seg_Tree *New(int l,int r)
{
Seg_Tree *p=S+sz;
sz++;
p->l=l;
p->r=r;
p->mid=(l+r)>>;
return p;
}
inline void pushup(Seg_Tree *p)
{
if(p->l==p->r)
{
p->sum=key[p->mid];
if(p->sum==)
p->over=;
return;
}
p->sum=p->ch[]->sum+p->ch[]->sum;
if(p->ch[]->over&&p->ch[]->over)
p->over=;
}
void build(Seg_Tree *p)
{
if(p->l==p->r)
{
pushup(p);
return;
}
p->ch[]=New(p->l,p->mid);
build(p->ch[]);
p->ch[]=New(p->mid+,p->r);
build(p->ch[]);
pushup(p);
}
inline void Init()
{
n=read();
for(int i=;i<=n;i++)
key[i]=read_LL();
root=New(,n);
build(root);
}
void pushdown(Seg_Tree *p,int l,int r)
{
if(p->over)return;
if(p->l==p->r)
{
key[p->mid]=(LL)(sqrt(key[p->mid]+0.5));
pushup(p);
return;
}
if(p->mid>=l)
pushdown(p->ch[],l,r);
if(p->mid<r)
pushdown(p->ch[],l,r);
pushup(p);
}
LL query(Seg_Tree *p,int l,int r)
{
if(l<=p->l&&p->r<=r)
return p->sum;
LL ans=;
if(l<=p->mid)
ans+=query(p->ch[],l,r);
if(p->mid<r)
ans+=query(p->ch[],l,r);
return ans;
}
inline void work()
{
m=read();
while(m--)
{
int opt=read(),x=read(),y=read();
if(x>y)x^=y^=x^=y;
if(opt) printf("%lld\n",query(root,x,y));
else pushdown(root,x,y);
}
}
int main()
{
freopen("god.in","r",stdin);
freopen("god.out","w",stdout);
Init();
work();
return ;
}
【BZOJ3038】上帝造题的七分钟2 线段树的更多相关文章
- Bzoj3038 上帝造题的七分钟2 线段树
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1135 Solved: 509 Description XLk觉得<上帝造题的七分钟>不太 ...
- BZOJ_3038_上帝造题的七分钟2_线段树
BZOJ_3038_上帝造题的七分钟2_线段树 题意: XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分 ...
- B3038 上帝造题的七分钟2 线段树
这就是一道变得比较奇怪的线段树,维护每个区间的最大值和区间和,然后关键在于每次取根号的话数值下降的特别快,不用几次就都是1了,所以每次暴力单点修改,然后直接找区间最大值,假如区间最大值是1的话,就直接 ...
- Codevs 2492 上帝造题的七分钟 2(线段树)
时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. " ...
- bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1066 Solved: 476[Submit][Status][Dis ...
- luogu4145 上帝造题的七分钟2 (线段树)
题意:给一个数列,维护两个操作,区间开根号.询问区间和 注意到1e12开根号六次后就变成1,而且根号1等于1 也就是说,就算我们用单点修改,只要跳过1,那么修改的次数最多也就是6n 那么维护一个区间最 ...
- bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*
bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...
- tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树
P1716 - 上帝造题的七分钟 From Riatre Normal (OI)总时限:50s 内存限制:128MB 代码长度限制:64KB 背景 Background 裸体就意味着 ...
- bzoj3038 上帝造题的七分钟2
Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...
随机推荐
- 【Hbase一】基础
此笔记仅用于作者记录复习使用,如有错误地方欢迎留言指正,作者感激不尽,如有转载请指明出处 Hbase基础 Hbase基础 Hbase定义 行存储 v s 列存储 Hbase数据模型 Hbase物理模型 ...
- PADS快捷键
问:在pads layout中怎样显示或隐藏铺铜的效果 答: 无模命令:po 或者spo 前者是平面层 后者是混合层. 同时你可以在ctrl+alt+c 色彩项中关闭 copper . 使用 无模命令 ...
- 环形链表II 142 使用快慢指针(C++实现)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- 004---Python基本数据类型--元祖
元祖 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px ...
- (数据科学学习手札20)主成分分析原理推导&Python自编函数实现
主成分分析(principal component analysis,简称PCA)是一种经典且简单的机器学习算法,其主要目的是用较少的变量去解释原来资料中的大部分变异,期望能将现有的众多相关性很高的变 ...
- R语言学习笔记(九):fivenum()与quantile()
fivenum() fivenum(x, na.rm = TRUE) x 为数值型向量,可以包含NA以及Inf,-Inf na.rm = TRUE 默认将NA和NaN去除,但是Inf还保留. five ...
- Oracle错误记录
1 SQLPlus无法登陆oracle,PLSql可以登陆,报错ORA-12560 环境变量 右击计算机属性-->高级系统设置-->高级-->环境变量-->系统变量--> ...
- 初步学习pg_control文件之八
接前文 初步学习pg_control文件之七 继续 看:catalog_version_no 代码如下: static void WriteControlFile(void) { ... /* * ...
- JavaScript---设计模式简介
概念 设计模式(Design pattern)是一套被反复使用.思想成熟.经过分类和无数次实战设计经验的总结的.使用设计模式是为了让系统代码可重用.可扩展.可解耦.更容易被人理解且能保证代码的可靠性. ...
- [Windows]_[C/C++]_[如何调试子进程]
场景 1.VC++ 的程序A在启动程序C时, 如果需要调试程序C的话一般有两种, 一种是通过菜单 调试->附加到进程的方式来调试程序, 缺点就是这个进程必须先启动, 但是一启动的话有可能就执行了 ...