P4145 上帝造题的七分钟2 / 花神游历各国
思路
每个数不会被开方超过log次,对每个数暴力开方即可
代码
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#define int long long
using namespace std;
struct Node{
int max,sum;
}Seg[100100<<2];
int a[100100],n,m;
void pushup(int o){
Seg[o].sum=Seg[o<<1].sum+Seg[o<<1|1].sum;
Seg[o].max=max(Seg[o<<1].max,Seg[o<<1|1].max);
}
void build(int l,int r,int o){
if(l==r){
Seg[o].sum=Seg[o].max=a[l];
return;
}
int mid=(l+r)>>1;
build(l,mid,o<<1);
build(mid+1,r,o<<1|1);
pushup(o);
}
void modi(int L,int R,int l,int r,int o){
if(Seg[o].max<=1)
return;
if(l==r){
Seg[o].max=Seg[o].sum=sqrt(Seg[o].sum);
return;
}
int mid=(l+r)>>1;
if(L<=mid)
modi(L,R,l,mid,o<<1);
if(R>mid)
modi(L,R,mid+1,r,o<<1|1);
pushup(o);
}
int query(int L,int R,int l,int r,int o){
if(L<=l&&r<=R){
return Seg[o].sum;
}
int mid=(l+r)>>1,ans=0;
if(L<=mid)
ans+=query(L,R,l,mid,o<<1);
if(R>mid)
ans+=query(L,R,mid+1,r,o<<1|1);
return ans;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
build(1,n,1);
scanf("%lld",&m);
for(int i=1;i<=m;i++){
int opt,l,r;
scanf("%lld %lld %lld",&opt,&l,&r);
if(l>r)
swap(l,r);
if(opt==0)
modi(l,r,1,n,1);
else
printf("%lld\n",query(l,r,1,n,1));
}
return 0;
}
P4145 上帝造题的七分钟2 / 花神游历各国的更多相关文章
- 洛谷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 / 花神游历各国(线段树区间开平方)
有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管. #include<bits/s ...
- luogu P4145 上帝造题的七分钟2 / 花神游历各国 维护区间和&&区间开根号
因为开根号能使数字减小得非常快 所以开不了几次(6次?)很大的数就会变成1..... 所以我们可以维护区间最大值,若最大值>1,则继续递归子树,暴力修改叶节点,否则直接return (好像也可以 ...
- day1 晚上 P4145 上帝造题的七分钟2 / 花神游历各国 线段树
#include<iostream> #include<cstdio> #include<cmath> using namespace std; ; struct ...
- [Luogu P4145] 上帝造题的七分钟2 / 花神游历各国
题目链接 题目简要:我们需要一个能支持区间内每一个数开方以及区间求和的数据结构. 解题思路:说道区间修改区间查询,第一个想到的当然就是分块线段树.数据范围要用long long.本来我是看到区间这两个 ...
随机推荐
- php高并发,大流量
一般使用LVS+PHP集群(1000台),就算日均80亿次请求,每秒有10万并发,那分到每台机器的请求只有100个.只要你的PHP程序不是太差,100QPS总没问题吧? 而真正的瓶颈在于数据库和存储系 ...
- sitecore系统教程之使用修补程序文件自定义Sitecore配置
您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...
- 多线程实现Thread.Start()与ThreadPool.QueueUserWorkItem两种方式对比
Thread.Start(),ThreadPool.QueueUserWorkItem都是在实现多线程并行编程时常用的方法.两种方式有何异同点,而又该如何取舍? 写一个Demo,分别用两种方式实现.观 ...
- python 将文件描述符包装成文件对象
有一个对应于操作系统上一个已打开的I/O 通道(比如文件.管道.套接字等)的整型文件描述符,你想将它包装成一个更高层的Python 文件对象. 一个文件描述符和一个打开的普通文件是不一样的.文件描述符 ...
- MyBatis学习笔记(一)——MyBatis快速入门
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...
- sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法
sqlyog连接Linux上的mysql报错误号码2013,错误号码1130的解决办法 1.报错误号码2013,可能是端口号不是默认的3306,需要改成对应的,检查命令是: [root@host et ...
- NodeJS,JavaScript正在吞噬这个世界
NodeJS,JavaScript正在吞噬这个世界 NodeJS,一个基于Google Chrome V8 JS引擎的服务器端JavaScript运行时,曾经被认识只是一个赶时髦的技术,有谁会想到,它 ...
- centos-ftp搭建
参照https://blog.csdn.net/a735834365/article/details/80622105 https://blog.csdn.net/a735834365/article ...
- mongoDB 的介绍
一.常用的网站 MongoDB -- 2009年被发布 MongoDB的官网: www.mongodb.org 可以下载安装包 和 使用文档 MongoDB国内官方网站: www.mo ...
- Action的编写方式
四.Action 的编写方式 : 三种 第一种 创建普通类 不继承任何类,不实现任何接口 Public class HelloAction{ } 第二种 创建类,实现接口action Public ...