简化版题意

给出一个长为n的数列,以及n个操作,操作涉及区间开方(每个数都向下取整),区间求和,保证所有数都为有符号32位正整数。

N<=50000


Solution

首先我们先思考:

一个有符号32位正整数最多只能被开方几次就会得到相同的值?

\(Example\):\(2147483647=2^{31}-1\)

最多5次(由于是向下取整)

所以,我们将数列中的每一个数,都开方5次,复杂度为\(O(5n)\)


然后我们再来考虑如何分块

对于每一个块,我们可以打一个标记\(tag[i]\)

表示第\(i\)块是否全为\(1\)

然后我们就可以进行分块处理啦


对于区间\([l,r]\)

对于区间求和,暴力分块统计即可

对于操作二

对于不完整的块,暴力开方即可

对于完整的块,先利用\(tag[i]\)判断是否需要开方,然后继续暴力

完结撒花!

贴代码

\\还是很可读的,就不给注释了
#include<bits/stdc++.h>
using namespace std;
const int siz=1e6+10;
int num[siz];
int tag[siz],s[siz],b[siz];
int n,len;
int sum(int l,int r)
{
int ans=0;
if(b[l]==b[r])
{
for(int i=l;i<=r;++i)
ans+=num[i];
return ans;
}
for(int i=l;b[i]==b[l];++i) ans+=num[i];
for(int i=r;b[i]==b[r];--i) ans+=num[i];
for(int i=b[l]+1;i<=b[r]-1;++i) ans+=s[i];
return ans;
}
void add(int l,int r)
{
if(b[l]==b[r])
{
if(tag[b[l]]) return ;
for(int i=l;i<=r;++i)
s[b[i]]-=num[i],num[i]=sqrt(num[i]),s[b[i]]+=num[i];
return ;
}
if(!tag[b[l]])
for(int i=l;b[i]==b[l];++i)
s[b[i]]-=num[i],num[i]=sqrt(num[i]),s[b[i]]+=num[i];
if(!tag[b[r]])
for(int i=r;b[i]==b[r];--i)
s[b[i]]-=num[i],num[i]=sqrt(num[i]),s[b[i]]+=num[i];
for(int i=b[l]+1;i<=b[r]-1;++i)
{
if(tag[i]) continue;
tag[i]=1;
for(int j=len*(i-1)+1;b[j]==i;++j)
{
s[i]-=num[j],num[j]=sqrt(num[j]),s[i]+=num[j];
if(num[j]>1) tag[i]=0;
}
}
}
int main()
{
scanf("%d",&n);
len=sqrt(n);
for(int i=1;i<=n;++i)
scanf("%d",&num[i]);
for(int i=1;i<=n;++i)
{
b[i]=(i-1)/len+1;
s[b[i]]+=num[i];
}
int opt,l,r,c;
for(int i=1;i<=n;++i)
{
scanf("%d%d%d%d",&opt,&l,&r,&c);
if(opt) printf("%d\n",sum(l,r));
else add(l,r);
}
return 0;
}

LOJ 6281 数列分块入门 5的更多相关文章

  1. LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)

    #6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5   题目描述 给出 ...

  2. LOJ.6281.数列分块入门5(分块 区间开方)

    题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...

  3. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  4. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

    #6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给 ...

  5. LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)

    #6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  6. LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)

    #6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  7. LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)

    #6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1   题目描述 给出 ...

  8. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论   题目描述 给出一个 ...

  9. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3   题目描述 给 ...

随机推荐

  1. SpringCloud-Eureka注册与发现

    这两年可以说微服务是热词,也是新领域,学习的成本也较高,基础东西太多比如什么Dubbo,zookeeper,Springboot等等.Dubbo也是实现服务治理又是阿里出的一套开源RPC框架,但是Sp ...

  2. 算法题:实现一个IP白名单过滤器

        最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口 boolean addWhiteIpAddress(String ip); boolean ...

  3. Flask实战第6天:视图函数Response返回值

    视图函数的返回值会被自动转换为一个响应对象,Flask的转换逻辑如下: 如果返回的是一个合法的响应对象,则直接返回 可以使用make_response函数来创建Response对象,这个方法可以设置额 ...

  4. 倒计时5S秒自动关闭弹窗

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. ES6系列之变量声明let const

    ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2 ...

  6. Web后端 JAVAWeb面试考查知识点

    面试知识点:1:简单讲一下Java的跨平台原理答:由于非跨平台的情况下,对于不同的操作系统,那么就需要开发几套不同程序代码.为了解决这个问题,java通过不同系统,不同版本,不同位数的JVM来屏蔽不同 ...

  7. 从零学习Fluter(八):Flutter的四种运行模式--Debug、Release、Profile和test以及命名规范

    从零学习Fluter(八):Flutter的四种运行模式--Debug.Release.Profile和test以及命名规范 好几天没有跟新我的这个系列文章,一是因为这两天我又在之前的基础上,重新认识 ...

  8. Activi相关表归纳

    Activi相关归纳总结记录:        ACT_RE_* : 'RE'表示repository.这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等). ACT_RU_* : 'RU'表示 ...

  9. 解析SQL Server之任务调度

    在前面两篇文章中( 浅谈SQL Server内部运行机制 and 浅谈SQL Server数据内部表现形式 ),我们交流了一些关于SQL Server的一些术语,SQL Sever引擎 与SSMS抽象 ...

  10. Python递归函数

    参考: https://pythonspot.com/recursion/ https://www.python-course.eu/recursive_functions.php 一.递归函数两大要 ...