简化版题意

给出一个长为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. ssh登录错误ECDSA host key for ip has changed解决方案

    当我们使用ssh root@ip登录Linux服务器时,服务器报错: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WAR ...

  2. POJ1006: 中国剩余定理的完美演绎

    POJ1006: 中国剩余定理的完美演绎   问题描述 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最 ...

  3. PHP数字金额转换大写金额

    早些年做CRM用到的一个金额转换函数,今天从旧项目中拿出来记录一下.金额转换的函数方法有很多,都很不错.不过这个是小崔刚工作的时候写的一个转换函数,多少还是有点纪念意义.如有问题请朋友们指出,小崔及时 ...

  4. Gulp 前端优化

    使用方法: 下载 node.js , https://nodejs.org/en/,并安装 msi 一下命令都属于 dos 命令 node -v,npm -v,检验是否下载成功(出现版本号) 将 np ...

  5. 原生JS替代jQuery的各种方法汇总

    前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...

  6. Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll

    Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll 在使用Anaconda创建一个虚拟环境出来,然后安装了scikit-learn.nump ...

  7. MySQL 基础知识梳理学习(五)----半同步复制

    1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...

  8. Delphi 项目配置选项

    打开项目设置窗口: 通过菜单:项目>选项 快捷键    :Shift+Ctrl+F11 Delphi编译器选项说明  Conditional defines 指定条件编译器指令中引用的符号. O ...

  9. Windows 2008 R2 域控制器迁移至windows 2016记录

    文章参考 https://social.technet.microsoft.com/Forums/zh-CN/21a5f5e9-feee-4454-acad-fd22989d7bed/22495296 ...

  10. webapi返回文件流

    逻辑说明 webapi返回类型为IHttpActionResult接口,内部方法返回HttpResponseMessage. public interface IHttpActionResult { ...