小清新线段树-花神游历各国
时间:2019-06-12
本文章向大家介绍小清新线段树-花神游历各国,主要包括小清新线段树-花神游历各国使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
小清新线段树,我一直觉得是剪过枝的线段树
一般题面会有一个神奇的(暂且这么说)更改方式,而且一般没办法区间更新出值
这道题同,
√n的处理,就是在上标÷2,而且我们可以发现,0,1这两个数极棒,√0=0,√1=1,修改了和没修改一样
那么,如果我们发现区间内全是0,1,就不必修改了
而现在有两种方法可以记录(无聊的内容)
1.用bool型直接判断,不用修改的记为1,修改的记为0(便于初始化)(内存友好)
2.用maxn判断,如果最大值<=1,不必修改
非常愉快
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #define N 101010 #define LL long long using namespace std; struct XDS{ int l,r,man; LL tot; };XDS tr[10*N]; int n,qn; int lik[N]; void build(int l,int r,int id){ tr[id].l=l; tr[id].r=r; if(l==r){ tr[id].tot=lik[l]; tr[id].man=lik[l]; return ; } int mid=(l+r)>>1; build(l,mid,2*id); build(mid+1,r,2*id+1); tr[id].tot=tr[2*id].tot+tr[2*id+1].tot; tr[id].man=max(tr[2*id].man,tr[2*id+1].man); } void change(int l,int r,int id){ if(tr[id].man<=1)return; if(tr[id].l==tr[id].r){ int e=floor(sqrt(tr[id].tot)); tr[id].tot=e; tr[id].man=e; return ; } int mid=(tr[id].l+tr[id].r)/2; if(mid>=l){ change(l,r,id*2); } if(mid<r){ change(l,r,id*2+1); } tr[id].man=max(tr[id*2].man,tr[id*2+1].man); tr[id].tot=tr[id*2].tot+tr[id*2+1].tot; } LL ffind(int l,int r,int id){ // cout<<"Ffind:"<<id<<" l"<<tr[id].l<<" r"<<tr[id].r<<" IN:"<<tr[id].tot<<"\n"; if(tr[id].l>=l&&tr[id].r<=r){//puts("Addin"); return tr[id].tot; } LL n=0; int mid=(tr[id].l+tr[id].r)/2; if(mid>=l){ n+=ffind(l,r,id*2); } if(r>mid){ n+=ffind(l,r,id*2+1); } return n; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&lik[i]); } build(1,n,1); scanf("%d",&qn); int a,b,c; for(int i=1;i<=qn;i++){ scanf("%d%d%d",&a,&b,&c); if(a==1){ printf("%lld\n",ffind(b,c,1)); } else{ change(b,c,1); } } return 0; }
这样,我们可以愉快的A了它
原文地址:https://www.cnblogs.com/kalginamiemeng/p/11009213.html
- 浅析多线程的对象锁和Class锁
- 使用strace诊断奇怪的sqlplus登录问题(r5笔记第29天)
- 读书笔记 之《Thinking in Java》(对象、集合、异常)
- 深度解析dba_segments和sys.seg$中的细节差异(上) (r5笔记第27天)
- 【大牛经验】26种语言输出HelloWord
- 深度解析dba_segments和sys.seg$中的细节差异(下) (r5笔记第28天)
- Linux命令(面试+工作版)
- 纠结的paste格式问题(未解决) (r5笔记第26天)
- 由MySQL中的falcon存储引擎引申的八卦杂谈(r5笔记第23天)
- 12.观察者/状态模式
- 数据补丁中需要注意的几个问题(r5笔记第21天)
- 简单对比MySQL和Oracle中的一个sql解析细节 (r5笔记第40天)
- 关于Oracle和MySQL中的无密码登录 (r5笔记第39天)
- 快速定位隐蔽的sql性能问题及调优(r5笔记第38天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发手机无线调试的方法
- Android Studio Gradle插件版本与Gradle版本之间的对应关系
- Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔
- Android自定义View实现简单文字描边功能
- 在脚本中单独使用django的ORM模型详解
- Android5.0之Activity的转场动画的示例
- Django-rest-framework中过滤器的定制实例
- Python greenlet和gevent使用代码示例解析
- 完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
- Android开发中Intent.Action各种常见的作用汇总
- Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
- Android添加ButterKnife时报错Error:(2, 0) Cannot add extension with name 'android'的解决办法
- Python视频编辑库MoviePy的使用
- python json.dumps中文乱码问题解决
- Android定时器实现定时执行、重复执行、定时重复执行、定次数执行的多种方式