博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Libre 6281] 数列分块入门 5 (分块)
阅读量:4473 次
发布时间:2019-06-08

本文共 1660 字,大约阅读时间需要 5 分钟。

水一道入门分块qwq

题面:
开方基本暴力。。
如果某一个区间全部都开成1或0就打上标记全部跳过就行了
因为一个数开上个四五六次就是1了所以复杂度能过233~

code:

//By Menteur_Hxy#include
#include
#include
#include
#include
using namespace std;int rd() { int x=0,fla=1; char c=' '; while(c>'9'|| c<'0') {
if(c=='-') fla=-fla; c=getchar();} while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar(); return x*fla;}const int MAX=50010;const int INF=0x3f3f3f3f;int n,blo;int v[MAX],fla[MAX],sum[MAX],bl[MAX];void sqr(int x) { if(fla[x]) return ; fla[x]=1;sum[x]=0; for(int i=(x-1)*blo+1;i<=x*blo;i++) { v[i]=sqrt(v[i]),sum[x]+=v[i]; if(v[i]>1) fla[x]=0; }}void add(int a,int b,int c) { for(int i=a;i<=min(bl[a]*blo,b);i++) { sum[bl[a]]-=v[i]; v[i]=sqrt(v[i]); sum[bl[a]]+=v[i]; } if(bl[a]!=bl[b]) for(int i=(bl[b]-1)*blo+1;i<=b;i++) { sum[bl[b]]-=v[i]; v[i]=sqrt(v[i]); sum[bl[b]]+=v[i]; } for(int i=bl[a]+1;i<=bl[b]-1;i++) sqr(i);}int query(int a,int b) { int ans=0; for(int i=a;i<=min(bl[a]*blo,b);i++) ans+=v[i]; if(bl[a]!=bl[b]) for(int i=(bl[b]-1)*blo+1;i<=b;i++) ans+=v[i]; for(int i=bl[a]+1;i<=bl[b]-1;i++) ans+=sum[i]; return ans;}int main() { n=rd(); blo=sqrt(n); for(int i=1;i<=n;i++) scanf("%d",&v[i]); for(int i=1;i<=n;i++) { bl[i]=(i-1)/blo+1; sum[bl[i]]+=v[i]; } for(int i=1;i<=n;i++) { int opt=rd(),a=rd(),b=rd(),c=rd(); if(opt) printf("%d\n",query(a,b)); else add(a,b,c); } return 0;}

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9247985.html

你可能感兴趣的文章
ViurtualBox配置虚拟机Linux的网络环境
查看>>
VLC 媒体播放器
查看>>
勿忘国耻2018/09/18
查看>>
Jenkins部署码云SpringBoot项目
查看>>
多标签分类(multi-label classification)综述
查看>>
史上最全面的Spring-Boot-Cache使用与整合
查看>>
图的遍历(深度优先与广度优先搜索两种方案)
查看>>
快速读入模板
查看>>
impdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误
查看>>
\n ^ \t的使用
查看>>
css盒模型
查看>>
探索式测试:测试自动化
查看>>
make install fping
查看>>
面试笔试题
查看>>
#loj3051 [十二省联考2019] 皮配
查看>>
MySql可视化工具MySQL Workbench使用教程
查看>>
个人站立会议第二阶段07
查看>>
云时代架构阅读笔记五——Web应用安全
查看>>
IOS 单击手势和cell点击冲突
查看>>
学习_HTML5_day3
查看>>