数据结构入门5—分块
来源:互联网 发布:遗传算法的流程图 编辑:程序博客网 时间:2024/06/08 09:34
发现分块真的是一个好东西,就是优化过后的暴力啊。
当修改的时间复杂度为O(n)而查询复杂度为O(1)或修改O(1)查询O(n)时用分块就可以转化为修改查询都是O(sqrt(n))的。
虽然比log n要差一些,但是分块真的很好写啊。。
比如一道LCT模板题 弹飞绵羊
//Serene#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>using namespace std;const int maxn=200000+10;int n,m,sz,lp[maxn],tot;int to[maxn],nd[maxn],id[maxn],jp[maxn];int aa;char cc;int read() {aa=0;cc=getchar();while(cc<'0'||cc>'9') cc=getchar();while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();return aa;}int main() {n=read(); sz=sqrt(n);for(int i=1;i<=n;i+=sz) lp[++tot]=i;lp[++tot]=n+1;id[n+1]=tot;int x=1,y,z;for(int i=1;i<=n;++i) to[i]=min(read()+i,n+1),id[i]= i>=lp[x+1]? ++x : x ;for(int i=n;i>=1;--i) {if(id[to[i]]==id[i]) nd[i]=nd[to[i]]+1,jp[i]=jp[to[i]];else nd[i]=1,jp[i]=to[i];}m=read();for(int i=1;i<=m;++i) {x=read();y=read()+1;if(x==1) {z=0;while(id[y]!=tot) {z+=nd[y];y=jp[y];}printf("%d\n",z);}else {z=min(read()+y,n+1);to[y]=z;for(int j=y;j&&id[j]==id[y];j--) {if(id[to[j]]==id[j]) nd[j]=nd[to[j]]+1,jp[j]=jp[to[j]];else nd[j]=1,jp[j]=to[j];}}}return 0;}
阅读全文
0 0
- 数据结构入门5—分块
- 分块入门
- 数据结构例程——分块查找
- 匹配 分块数据结构
- HDU1754【分块入门1】
- POJ3468【分块入门2】
- 数据结构之链表分块
- 大话数据结构之:分块索引
- TYVJ1463 智商问题【数据结构】【分块】
- 蒟蒻的分块入门
- 数据结构实践——(2) 验证算法——分块查找
- 数据结构 之 检索 (分块检索、hash)
- 【数据结构】静态查找之分块查找
- ZOJ2112 Dynamic Rankings 解题报告【数据结构】【分块】
- BZOJ2453 维护队列 解题报告【数据结构】【分块】
- Cdqz_Openjudge1010 Challenge 10 解题报告【数据结构】【分块】
- 数据结构-查找-分块查找(1)算法简介
- 数据结构入门——递归
- Js 数据去掉小数点后边的0,保留非零
- 日志
- eclipse运行报java.lang.OutOfMemoryError: PermGen space解决方法
- scrapy框架笔记
- Ubuntu16.04 + 1080Ti深度学习环境配置教程
- 数据结构入门5—分块
- idea从SVN上拉项目以及Tomcat运行过程总结
- 关于编辑器phpStorm的使用
- 二维字符串数组的初始化-动态内存分配
- Electron实现使用Sqlite3库
- 如何在初始化窗体不是最大化情况下,获取最大化窗体的客户区的尺寸
- 时间同步:适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位
- ACM自用常用模板(c++版)
- Mysql数据库与sql语言(三)--常用函数