[LOJ] 分块九题 5
2024-08-30 17:08:41
区间开平方,区间查询。
lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的。
//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cctype>
#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;
}
最新文章
- 学习linux/unix编程方法的建议(转)
- oracle 异常
- RichTextBoxEx2
- AutoMapperHelper
- 【C语言】15-预处理指令1-宏定义
- linux代码段,数据段,BSS段, 堆,栈(二)
- gcj_2016_Round1_B
- Windows IP安全策略。
- (转)互联网保险O2O平台微服务架构设计
- phthon网络编程
- hdu5904 LCIS
- C++ 程序在运行时不显示dos界面
- Win7 64位 + LoadRunner 11录制时弹不出IE的解决办法 Win7 64位 + LoadRunner 11录制时弹不出IE的解决办法
- 工作效率提升之Eclipse篇(1):干掉烦人的xml文件的validation
- node.js获取本机Ip, hostName, mac
- Python图形编程探索系列-06-按钮批量生产函数
- tensorflow 指定使用gpu处理,tensorflow占用多个GPU但只有一个在跑
- php使用redis扩展以及安装redis(linux下)
- Python - WebDriver 识别登录验证码
- shell 脚本实战笔记(5)--搭建资源的镜像服务器
热门文章
- HDU5145:5145 ( NPY and girls ) (莫队算法+排列组合+逆元)
- hdu 1573 X问题【扩展中国剩余定理】
- Luogu P2114[NOI2014]起床困难综合症 【贪心/位运算】By cellur925
- (六)SpringBoot整合Swagger2框架
- redis查数据
- python之unittest
- Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) 题解
- [APIO2012]派遣 洛谷P1552 bzoj2809 codevs1763
- linux常用的shell命令
- vue-resource emulateJSON的作用