分块

作者: fo0Old | 来源:发表于2017-09-18 18:33 被阅读0次

分块

struct Block
{
    static const int __=50005;
    static const int _b_=300;
    ll a[__];int n,bsz,bel[__];
    ll ad[_b_];
    vector<ll>ord[_b_];

    ll operator[](int x){return a[x]+ad[bel[x]];}

    void build()
    {
        bsz=(int)sqrt(n);
        for(int i=1;i<=n;i++)
            ord[bel[i]=(i-1)/bsz+1].pb(a[i]);
        for(int i=1;i<=bel[n];i++)
            sort(ord[i].begin(),ord[i].end());
    }

    void rebuild(int x)
    {
        int r=(bel[n]==x)?n:(x*bsz);
        ord[x].clear();
        for(int i=(x-1)*bsz+1;i<=r;i++)
            ord[x].pb(a[i]);
        sort(ord[x].begin(),ord[x].end());
    }

    void add(int l,int r,ll val)
    {
        for(int i=l;i<=min(r,bel[l]*bsz);i++)
            a[i]+=val;
        rebuild(bel[l]);
        if(bel[l]==bel[r])return;
        for(int i=bel[l]+1;i<bel[r];i++)
            ad[i]+=val;
        for(int i=(bel[r]-1)*bsz+1;i<=r;i++)
            a[i]+=val;
        rebuild(bel[r]);
    }

    int get_min(int l,int r,ll val)
    {
        int res=0;
        for(int i=l;i<=min(r,bel[l]*bsz);i++)
            if(a[i]+ad[bel[i]]<val)res++;
        if(bel[l]==bel[r])return res;
        for(int i=bel[l]+1;i<bel[r];i++)
            res+=lower_bound(ord[i].begin(),ord[i].end(),val-ad[i])-ord[i].begin();
        for(int i=(bel[r]-1)*bsz+1;i<=r;i++)
            if(a[i]+ad[bel[i]]<val)res++;
        return res;
    }

    void clear(){memset(ad,0,sizeof(ad));}
}b;

相关文章

  • 矩阵代数(四)- 分块矩阵

    小结 分块矩阵 分块矩阵运算 分块矩阵的逆 分块矩阵 矩阵,也可写成分块矩阵的形状,它的元素是分块(子矩阵) 加法...

  • 14、超大图像二值化方法

    分块全局阈值 分块局部阈值

  • 学习笔记CB003:分块、标记、关系抽取、文法特征结构

    分块,根据句子的词和词性,按照规则组织合分块,分块代表实体。常见实体,组织、人员、地点、日期、时间。名词短语分块(...

  • 分块

    分块,是把DVD遥控器上的按钮组织起来、方便操作的有效方式。用户界面设计离不开分块。微软的Word包含数百项功能。...

  • 分块

    分块

  • 信息提取

    用于实体识别的基本技术是分块(chunking),如下将多个单词合并成句子的一个部分就是分块。 名词短语分块 名词...

  • 文件分块下载

    1、先检测是否支持分块下载,如果不支持,则直接下载,若支持,则将剩余内容分块下载。2、各个分块下载时保存到各自临时...

  • 大文件分块上传

    大致步骤 1 图片分块 2 分块的图片 用formdata 保存在发后台 代码实现

  • 分页 分片 分块的区别

    分页 分片 分块

  • 分块思想

    数据结构: √N个块block[0,...,√N - 1],范围是从[k*√N,(k+1)*√N - 1],查询的...

网友评论

      本文标题:分块

      本文链接:https://www.haomeiwen.com/subject/xtwbsxtx.html