当前位置: 首页 > news >正文

源码交易网站杭州seo服务公司

源码交易网站,杭州seo服务公司,个人网上银行登录官网,自己制作广告图片软件分块 分块的思想和珂朵莉树很类似,就是把原序列分成若干个块,对块进行操作的奇妙思想。复杂度通常带根号。分块的块长也有讲究,通常对于大小为 n n n 的数组,取距离 n \sqrt n n ​ 最近的 2 2 2 的幂数或直接取 n \sqrt n n…

分块

分块的思想和珂朵莉树很类似,就是把原序列分成若干个块,对块进行操作的奇妙思想。复杂度通常带根号。分块的块长也有讲究,通常对于大小为 n n n 的数组,取距离 n \sqrt n n 最近的 2 2 2 的幂数或直接取 n \sqrt n n 即可,如果 TLE 了可以考虑把块长乘 2 2 2 或除以 2 2 2

数列分块

最简单的分块。基本上分两步走,对于一个操作的区间 [ l , r ] [l,r] [l,r],如果刚好在某个块区间内,直接暴力修改 [ l , r ] [l,r] [l,r] 的值;如果横跨多个区间,先处理整块,然后处理边角料。

常用操作如下

  1. 区间加法、单点查询

    最简单的数列分块操作,具体详见代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long longconst int maxn=5e4+5;
    int n,opt,ll,rr,cc,len,a[maxn],id[maxn],tag[maxn];void add(int l,int r,int c)
    {int sid=id[l],eid=id[r];if(sid==eid)for(int i=l;i<=r;i++)a[i]+=c;else{for(int i=l;id[i]==sid;i++) a[i]+=c;for(int i=sid+1;i<eid;i++) tag[i]+=c;for(int i=r;id[i]==eid;i--) a[i]+=c;}
    }signed main()
    {cin>>n;len=sqrt(n);for(int i=1;i<=n;i++) cin>>a[i],id[i]=(i-1)/len+1;for(int i=1;i<=n;i++){cin>>opt>>ll>>rr>>cc;if(!opt) add(ll,rr,cc);else cout<<a[rr]+tag[id[rr]]<<endl;}return 0;
    }
    
  2. 区间加法、区间求和

    块长同样是 n \sqrt n n ,由均值不等式可知此时单词操作的时间复杂度最优,为 O ( n ) O(\sqrt n) O(n )。预处理每一个块的区间和 s s s

    对于区间 [ l , r ] [l,r] [l,r] 的查询操作,考虑几种情况:

    • l l l r r r 在同一个块内,暴力统计,最坏时间复杂度为 O ( n ) O(\sqrt n) O(n )
    • l l l r r r 不在同一个块内,暴力统计不完整的块,直接累加完整的块的区间和,最坏时间复杂度为 O ( n ) O(\sqrt n) O(n )

    对于区间 [ l , r ] [l,r] [l,r] 的加法操作,同样按照上面的思考方式:

    • l l l r r r 在同一个块内,暴力修改区间即可,最坏时间复杂度为 O ( n ) O(\sqrt n) O(n )
    • l l l r r r 不在同一个块内,暴力修改不完整的块同时更新 s s s,直接修改完整块的 s s s,最坏时间复杂度为 O ( n ) O(\sqrt n) O(n )

    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long longconst int maxn=50005;
    int a[maxn],id[maxn],tag[maxn]/*区间直接打标记*/,c,s[maxn],len;void add(int l,int r,int v)
    {int sid=id[l],eid=id[r];//start-id,end-idif(sid==eid) for(int i=l;i<=r;i++) a[i]+=v,s[sid]+=v;else{for(int i=l;id[i]==sid;i++) a[i]+=v,s[sid]+=v;for(int i=r;id[i]==eid;i--) a[i]+=v,s[eid]+=v;for(int i=sid+1;i<eid;i++) tag[i]+=v,s[i]+=len*v;}
    }int query(int l,int r,int mod)
    {int sid=id[l],eid=id[r],ans=0;if(sid==eid) {for(int i=l;i<=r;i++) ans=(ans+a[i]+tag[sid])%mod;return ans;}else{for(int i=l;id[i]==sid;i++) ans=(ans+a[i]+tag[sid])%mod;for(int i=r;id[i]==eid;i--) ans=(ans+a[i]+tag[eid])%mod;for(int i=sid+1;i<eid;i++) ans=(ans+s[i])%mod;return ans;}
    }signed main()
    {int n;cin>>n;len=sqrt(n);for(int i=1;i<=n;i++) cin>>a[i],id[i]=(i-1)/len+1,s[id[i]]+=a[i];while(n--){int opt,l,r;cin>>opt>>l>>r>>c;if(!opt) add(l,r,c);else cout<<query(l,r,c+1)<<endl;}return 0;
    }
    

块状数组

http://www.hkea.cn/news/641908/

相关文章:

  • 网站开发方式有哪四种搜索引擎优化课程总结
  • 申请做网站、论坛版主app推广接单
  • 青海网站建设广州seo优化推广
  • 物流公司网站制作模板上海网站关键词排名
  • 广西建设人才网搜索引擎优化的目标
  • 比汉斯设计网站素材图片搜索识图入口
  • php网站架设教程英雄联盟韩国
  • 做毕设好的网站百度客服电话24小时
  • 上海手机网站建设电话咨询seo综合查询系统
  • wordpress 4.6 中文版沈阳seo
  • 文件管理软件天津搜索引擎优化
  • 九亭网站建设全国疫情高峰时间表最新
  • 青岛网站建设公司武汉seo收费
  • mvc网站建设的实验报告怎么做优化
  • 有官网建手机网站千锋教育培训多少钱费用
  • b2c交易模式的网站有哪些百度营销客户端
  • flash 学习网站重庆网站seo多少钱
  • 年终总结ppt模板免费下载网站小红书seo排名规则
  • 自己架设网站口碑营销的产品有哪些
  • 湖北省网站备案最快几天天津百度推广排名优化
  • app在线开发制作平台seo网络优化前景怎么样
  • 商务网站的基本情况网站建设工作总结
  • 山西建设厅网站网络销售怎么聊客户
  • 软装素材网站有哪些seo网络排名优化哪家好
  • 邯郸市做网站建设网络口碑营销案例分析
  • 罗湖网站建设联系电话西安核心关键词排名
  • 如何编写网站电脑清理软件十大排名
  • 怎么给企业制作网站seo关键词排名优化哪好
  • 高仿服装网站建设西安百度关键词推广
  • 网站单页面怎么做的百度seo站长工具