洛谷P4145 上帝造题的⑦minutes ②
又是线段树。
区间开平方求和,套路题。
如果开到了1就不用再开下去了,否则直接到底。
记得 l > r 时交换 l r
#include <cstdio>
#include <cmath>
#include <algorithm>
typedef long long LL;
const int N = ;
struct SegmentTree {
LL sum[N << ];
bool vis[N << ]; inline void pushup(int l, int r, int o) {
if(l == r) {
if(sum[o] == ) {
vis[o] = ;
}
return;
}
sum[o] = sum[o << ] + sum[o << | ];
vis[o] = (sum[o] == (r - l + ));
return;
}
void change(int L, int R, int l ,int r, int o) {
if(vis[o]) {
return;
}
int mid = (l + r) >> ;
if(l == r) {
sum[o] = (LL)(sqrt((long double)(sum[o])));
pushup(l, r, o);
return;
}
if(L <= mid) {
change(L, R, l, mid, o << );
}
if(mid < R) {
change(L, R, mid + , r, o << | );
}
pushup(l, r, o);
return;
}
LL ask(int L, int R, int l, int r, int o) {
if(L <= l && r <= R) {
return sum[o];
}
if(r < L || R < l) {
return ;
}
int mid = (l + r) >> ;
return ask(L, R, l, mid, o << ) + ask(L, R, mid + , r, o << | );
}
void build(int l, int r, int o) {
if(l == r) {
scanf("%lld", &sum[o]);
pushup(l, r, o);
return;
}
int mid = (l + r) >> ;
build(l, mid, o << );
build(mid + , r, o << | );
pushup(l, r, o);
return;
}
}SgT; int main() {
int n;
scanf("%d", &n);
SgT.build(, n, );
int m;
scanf("%d", &m);
int f, x, y;
while(m--) {
scanf("%d%d%d", &f, &x, &y);
if(x > y) {
std::swap(x, y);
}
if(f) {
printf("%lld\n",SgT.ask(x, y, , n, ));
}
else {
SgT.change(x, y, , n, );
}
}
return ;
}
AC代码
洛谷P4145 上帝造题的⑦minutes ②的更多相关文章
- 洛谷P4145 上帝造题的七分钟2/花神游历各国 [树状数组,并查集]
题目传送门 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是 ...
- 洛谷P4145——上帝造题的七分钟2 / 花神游历各国
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
- 洛谷P4145 上帝造题的七分钟2 / 花神游历各国(重题:洛谷SP2713 GSS4 - Can you answer these queries IV)
题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...
- 洛谷 P4145 上帝造题的七分钟2 / 花神游历各国
洛谷 这题就是区间开根号,区间求和.我们可以分块做. 我们记布尔数组vis[i]表示第i块中元素是否全部为1. 因为显然当一个块中元素全部为1时,并不需要对它进行根号操作. 我们每个块暴力开根号,因为 ...
- 洛谷P4145上帝造题的七分钟——区间修改
题目:https://www.luogu.org/problemnew/show/P4145 区间开平方,可以发现其实开几次就变成1,不需要开了,所以标记一下,每次只去开需要开的地方: 原来写的并查集 ...
- 洛谷 P4514 上帝造题的七分钟 解题报告
P4514 上帝造题的七分钟 题目背景 裸体(裸题)就意味着身体(神题). 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n \times m\)矩阵. 第二 ...
- 洛谷P4514 上帝造题的七分钟
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了000的n×mn×mn×m矩阵. 第二分钟,L说,要能修改,于是便有 ...
- P4145 上帝造题的七分钟2
题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段 ...
- 【题解】 Luogu P4145 上帝造题的七分钟2 / 花神游历各国
原题传送门 这道题实际和GSS4是一样的,只是输入方式有点区别 GSS4传送门 这道题暴力就能过qaq(这里暴力指线段树) 数据比较水 开方修改在线段树中枚举叶节点sqrt 查询区间和线段树基本操作 ...
随机推荐
- JDK8漫谈——集合更强大
解决什么问题 集合计算不足 解决重复代码 背后思想 管道 封装 数据处理 内容说明 是什么 计算担当.集合用于数据存储,流用于数据计算,不会修改原始数据 内置循环.高级迭代器,内置循环和计算 单向.数 ...
- python-深浅copy-18
# 赋值运算l1 = [1,2,3]l2 = l1l1.append('a')print(l1,l2) # [1, 2, 3, 'a'] [1, 2, 3, 'a'] #copyl1 = [1,2,3 ...
- 点评qq浏览器
1.内核. qq浏览器用的是是IE8的内核,而且是只有IE内核,所以,在速度上没办法跟那些webkit内核做对比了,不过也没有太慢,在沈航的网速下,打开网页的速度也还是勉强可以接受的. ...
- sprint最后冲刺-out to out
摘要:团队合作.实现四则APP,上传代码到github. 1.之前我们队一直无法把代码上传到github.直到今天.找到了一种可以协助代码上github的软件msysgit. 经过:(一行行看) 我们 ...
- C 实现选择排序
一.选择排序的思想 假设有一个7元素的数组 [11, 24, 5, 17, 2, 8, 20],我们通过选择排序来从小到大排序. 思想是进行7次外循环从0-->6,每一次又是一个内循环,从i+1 ...
- spring 注入DI
web 项目的搭建 以注入对象的方式
- FreeMarker boolean Issue
FreeMarker template error:Can't convert boolean to string automatically, because the "boolean_f ...
- eclipse里面找不到databaseexplorer
在window==>show view==>Other==>Data Management==>Database explorer配置:在右下方点击Database Sourc ...
- IntersectionObserver简介
写在前面 在移动端,有个很重要的概念,叫做懒加载,适用于一些图片资源特别多,ajax数据特别多的页面中,经常会有动态加载数据的场景中,这个时候,我们通常是使用监听scroll或者使用setInterv ...
- ACM数论之旅12---康托展开((*゚▽゚*)装甲展开,主推进器启动,倒计时3,2,1......)
在我们做题中,搜索也好,动态规划也好,我们往往有时候需要用一个数字表示一种状态 比如有8个灯泡排成一排,如果你用0和1表示灯泡的发光情况 那么一排灯泡就可以转换为一个二进制数字了 比如 0110011 ...