博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3038 上帝造题的七分钟2
阅读量:5019 次
发布时间:2019-06-12

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

线段树裸题,但是由于是开平方根,所以只能暴力单点修改

但是,光这么做会T,当单点值为0或1是就不会变了。

于是可以给区间打上标记,有标记就不递归下去修改了。AC

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rre(i,r,l) for(int i=(r);i>=(l);i--)#define re(i,l,r) for(int i=(l);i<=(r);i++)#define Clear(a,b) memset(a,b,sizeof(a))#define inout(x) printf("%d",(x))#define douin(x) scanf("%lf",&x)#define strin(x) scanf("%s",(x))#define LLin(x) scanf("%lld",&x)#define op operator#define CSC maintypedef unsigned long long ULL;typedef const int cint;typedef long long LL;using namespace std;void inin(int &ret){ ret=0;int f=0;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=1;ch=getchar();} while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar(); ret=f?-ret:ret;}LL sum[400010];int l[400010],n,m,r[400010],bo[400040];LL a[100010];void build(int k,int ll,int rr){ l[k]=ll,r[k]=rr; if(ll==rr){sum[k]=a[ll];if(sum[k]==0||sum[k]==1)bo[k]=1;return ;} int mid=(ll+rr)>>1; build(k<<1,ll,mid); build(k<<1|1,mid+1,rr); sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];}LL query(int k,int ll,int rr){ if(l[k]>=ll&&r[k]<=rr)return sum[k]; int mid=(l[k]+r[k])>>1; if(rr<=mid)return query(k<<1,ll,rr); if(ll>mid)return query(k<<1|1,ll,rr); return query(k<<1,ll,rr)+query(k<<1|1,ll,rr);}void change(int k,int ll,int rr){ if(bo[k])return ; if(l[k]==r[k]){sum[k]=sqrt(sum[k]);if(sum[k]==0||sum[k]==1)bo[k]=1;return ;} int mid=(l[k]+r[k])>>1; if(rr<=mid)change(k<<1,ll,rr); else if(ll>mid)change(k<<1|1,ll,rr); else change(k<<1,ll,rr),change(k<<1|1,ll,rr); sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];}int CSC(){ inin(n); re(i,1,n)LLin(a[i]); build(1,1,n); inin(m); re(i,1,m) { int opt,aa,bb;inin(opt),inin(aa),inin(bb); if(aa>bb)swap(aa,bb); if(opt==1)printf("%lld\n",query(1,aa,bb)); else change(1,aa,bb); } return 0;}

 

转载于:https://www.cnblogs.com/HugeGun/p/5151148.html

你可能感兴趣的文章
分布式平台下的OS---CentOs 无人值守
查看>>
Spring 梳理 - filter、interceptor、aop实现与区别 -第二篇
查看>>
解决可以Ping通ip地址,但Ping不通域名的思路
查看>>
vue-自定义组件传
查看>>
HTTP协议
查看>>
Quartus12.0 快速引脚分配,避免重复输入
查看>>
课程设计之第二次冲刺----第三天
查看>>
js函数与各种简单例题
查看>>
STM32 堆栈使用解析
查看>>
Lowest Common Ancestor of a Binary Tree
查看>>
CentOS目录树详细解释
查看>>
UVa 10161 - Ant on a Chessboard
查看>>
C++ STL容器底层机制
查看>>
.net 查壳工具
查看>>
文本处理工具(一)基础处理
查看>>
LeetCode OJ - Evaluate Reverse Polish Notation
查看>>
Largest product in a grid( Project Euler problem 11)
查看>>
Arduino与水泵实验+土壤湿度传感器
查看>>
C# 嵌入CMD.exe
查看>>
SQL语言分为四类,每类分别是?各包括什么?
查看>>