博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LOJ] 分块九题 5
阅读量:6315 次
发布时间:2019-06-22

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

区间开平方,区间查询。

lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的。

//Stay foolish,stay hungry,stay young,stay simple#include
#include
#include
#include
#define sq(x) (floor(sqrt(x)))using namespace std;const int MAXN=500005;inline int read_d(){ int ret=0,op=1;char c; while(c=getchar(),!isdigit(c))op=c=='-'?-1:1; while(isdigit(c)){ ret=ret*10+c-'0'; c=getchar(); } return ret*op;} int n;int sum[MAXN],a[MAXN];bool lazy[MAXN];int l[MAXN],r[MAXN],bl[MAXN];int block,num;void build(){ block=sqrt(n); num=n/block; if(n%block) num++; for(int i=1;i<=n;i++){ l[i]=(i-1)*block+1; r[i]=i*block; bl[i]=(i-1)/block+1; sum[bl[i]]+=a[i]; }}void updata_block(int id){ lazy[id]=1;sum[id]=0; for(int i=l[id];i<=r[id];i++){ if(a[i]>=2) lazy[id]=0; a[i]=sq(a[i]); sum[id]+=a[i]; }}void updata(int x,int y){ if(bl[x]==bl[y]){ if(lazy[bl[x]]) return; for(int i=x;i<=y;i++){ sum[bl[i]]-=a[i]; a[i]=sq(a[i]); sum[bl[i]]+=a[i]; } return; } for(int i=x;i<=r[bl[x]];i++){ sum[bl[i]]-=a[i]; a[i]=sq(a[i]); sum[bl[i]]+=a[i]; } for(int i=l[bl[y]];i<=y;i++){ sum[bl[i]]-=a[i]; a[i]=sq(a[i]); sum[bl[i]]+=a[i]; } for(int i=bl[x]+1;i<=bl[y]-1;i++){ if(lazy[i]) continue; updata_block(i); }}int query(int x,int y){ int ret=0; if(bl[x]==bl[y]){ for(int i=x;i<=y;i++) ret+=a[i]; return ret; } for(int i=x;i<=r[bl[x]];i++) ret+=a[i]; for(int i=l[bl[y]];i<=y;i++) ret+=a[i]; for(int i=bl[x]+1;i<=bl[y]-1;i++) ret+=sum[i]; return ret;}int main(){ n=read_d(); for(int i=1;i<=n;i++) a[i]=read_d(); build(); for(int i=1;i<=n;i++){ int q=read_d(),x=read_d(),y=read_d(),z=read_d(); if(q==0) updata(x,y); else printf("%d\n",query(x,y)); } return 0;}

转载于:https://www.cnblogs.com/ghostcai/p/9247436.html

你可能感兴趣的文章
Python selenium 滚动条 详解
查看>>
poj1035Spell checker
查看>>
微信程序开发
查看>>
如何退出minicom【学习笔记】
查看>>
李开复教你如何给自己的简历打分
查看>>
POJ 3071 Football 【概率DP】
查看>>
打开Silverlight设计器发生了未经处理的异常
查看>>
sina微博加入到博客园
查看>>
Azure storage tool [Free]
查看>>
C++内存布局之虚拟继承
查看>>
Sqlserver 数据库基本查询
查看>>
图书馆维护系统总结
查看>>
[hadoop源码阅读][5]-counter的使用和默认counter的含义
查看>>
NOOK2刷机成功
查看>>
NSIndexPath的初始化方法
查看>>
Mac Mountain 更改mysql root 密码和无法创建用户问题
查看>>
发送一条微博
查看>>
Linux创建用户、用户组 及 删除
查看>>
简明Python3教程 14.输入输出
查看>>
【Ubuntu】Ubuntu Java 环境变量
查看>>