有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
struct node
{
int l;
int r;
unsigned long long sum;
unsigned long long mx;
}tree[maxn*];
int n,m;
unsigned long long l,r,opt;
unsigned long long a[maxn];
void build(int now,int l,int r)
{
tree[now].l=l;
tree[now].r=r;
if(l==r)
{
tree[now].sum=tree[now].mx=a[l];
return;
}
int mid=(l+r)>>;
build(now*,l,mid);
build(now*+,mid+,r);
tree[now].sum=tree[now*].sum+tree[now*+].sum;
tree[now].mx=max(tree[now*].mx,tree[now*+].mx);
}
void update(int now,int l,int r)
{
if(tree[now].l==tree[now].r)
{
tree[now].sum=sqrt(tree[now].sum);
tree[now].mx=sqrt(tree[now].mx);
return;
}
int mid=(tree[now].l+tree[now].r)>>;
if(l<=mid&&tree[now*].mx>)
{
update(now*,l,r);
}
if(r>mid&&tree[now*+].mx>)
{
update(now*+,l,r);
}
tree[now].sum=tree[now*].sum+tree[now*+].sum;
tree[now].mx=max(tree[now*].mx,tree[now*+].mx);
}
long long query(int now,int l,int r)
{
if(tree[now].l>=l&&tree[now].r<=r)
{
return tree[now].sum;
}
int mid=(tree[now].l+tree[now].r)>>;
long long ans=;
if(l<=mid)
{
ans+=query(now*,l,r);
}
if(mid<r)
{
ans+=query(now*+,l,r);
}
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
}
build(,,n);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%lld%lld%lld",&opt,&l,&r);
if(l>r)
{
swap(l,r);
}
if(opt==)
{
update(,l,r);
}
else
{
printf("%lld\n",query(,l,r));
}
}
return ;
}
多说几句,数据比较毒瘤,狂开unsigned long long 就能AC
P4145 上帝造题的七分钟2 / 花神游历各国(线段树区间开平方)的更多相关文章
-
day1 晚上 P4145 上帝造题的七分钟2 / 花神游历各国 线段树
#include<iostream> #include<cstdio> #include<cmath> using namespace std; ; struct ...
-
GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)
GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...
-
洛谷P4145 上帝造题的七分钟2/花神游历各国 [树状数组,并查集]
题目传送门 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是 ...
-
洛谷P4145——上帝造题的七分钟2 / 花神游历各国
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
-
洛谷P4145 上帝造题的七分钟2 / 花神游历各国(重题:洛谷SP2713 GSS4 - Can you answer these queries IV)
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
-
【题解】 Luogu P4145 上帝造题的七分钟2 / 花神游历各国
原题传送门 这道题实际和GSS4是一样的,只是输入方式有点区别 GSS4传送门 这道题暴力就能过qaq(这里暴力指线段树) 数据比较水 开方修改在线段树中枚举叶节点sqrt 查询区间和线段树基本操作 ...
-
洛谷 P4145 上帝造题的七分钟2 / 花神游历各国
洛谷 这题就是区间开根号,区间求和.我们可以分块做. 我们记布尔数组vis[i]表示第i块中元素是否全部为1. 因为显然当一个块中元素全部为1时,并不需要对它进行根号操作. 我们每个块暴力开根号,因为 ...
-
P4145 上帝造题的七分钟2 / 花神游历各国
思路 每个数不会被开方超过log次,对每个数暴力开方即可 代码 #include <algorithm> #include <cstring> #include <cst ...
-
luogu P4145 上帝造题的七分钟2 / 花神游历各国 维护区间和&;&;区间开根号
因为开根号能使数字减小得非常快 所以开不了几次(6次?)很大的数就会变成1..... 所以我们可以维护区间最大值,若最大值>1,则继续递归子树,暴力修改叶节点,否则直接return (好像也可以 ...
随机推荐
-
Python之路----------内置函数
1.abs(x)绝对值 #coding=utf-8 a = 1 b = -2 print(abs(a)) print(abs(b)) 2.all(iterable)可迭代对象里面所有内容为真返回真,空 ...
-
luogu1151 亲戚
题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...
-
wxpython 拖放
拖放对用户是非常直观.它在许多桌面应用程序,用户可以复制或只需用鼠标拖动和删除另一个窗口中移动对象从一个窗口到另一个中. 拖放操作包括以下步骤 - 声明拖放目标 创建数据对象 创建 wx.DropSo ...
-
2015 款 Macbook Pro 的 ForceTouch 触控板开启 三指拖动
RT, 默认的触控板设置中没有了三指拖动这个选项, 但是可以通过勾选 辅助功能 -> 鼠标与触控板 -> 触控板选项 中的 启用拖移 来启用三指拖动...
-
构建自己的PHP框架--构建模版引擎(2)
自从来到新公司就一直很忙,最近这段时间终于稍微闲了一点,赶紧接着写这个系列,感觉再不写就烂尾了. 之前我们说到,拿到{{ $name }}这样一段内容时,我们只需要将它转化成<?php echo ...
-
JNI实战(四):C 调用 Java
在前面我们讲了一下如何使用Java调用C,本文我们讲一下如何使用JNI提供的接口来反射得到Java方法进行调用. 主要步骤如下: FindClass (找到Java层的类) GetMethodID / ...
-
【RSYSLOG】Log4x To Rsyslog Config
Log4x To Rsyslog Config Log4net配置 <!--RemoteSyslogAppender--> <appender name="remoteSy ...
-
Codeforces Round #512 D - Vasya and Triangle
D - Vasya and Triangle #include<bits/stdc++.h> using namespace std; #define LL long long LL gc ...
-
CPP_template
泛型编程是独立于任何特定类型的方式编写代码.模板是泛型编程的基础,模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发. 模板提供通用类型和通用函数,定义中包含t ...
-
添加到sudo组里
$visudo //切记,此处没有vi和sudo之间没有空格 1.移动光标,到最后一行(最好是找到root ALL=(ALL) ALL,在下面添加一行) 2.按a,进入append模式3.输入 ...