博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分块,线段树,树状数组板子
阅读量:5821 次
发布时间:2019-06-18

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

分块

int n,a[MAXN],belong[MAXN];    int S,C,st[MAXN],ed[MAXN],sum[MAXN];        void pretreat()    {        S=int(sqrt(n));        for(int i=1;i<=n;i+=S){            st[++C]=i;            ed[C]=min(i+S-1,n);        }        for(int i=1;i<=C;i++)            for(int j=st[i];j<=ed[i];j++)                belong[j]=i,sum[j]+=a[i];    }        int update(int x,int k){        a[x]+=k;        sum[belong[x]]+=k;    }        int query(int x,int y){        int l=belong[x],r=belong[y],ans=0;        if(l==r){            for(int i=x;i<=y;i++)                ans+=a[i];        }        else{            for(int i=x;i<=ed[l];i++)                ans+=a[i];            for(int i=l+1;i

线段树

namespace Segment_Tree{    int n;    data t[MAXN*4];        inline int lc(int p){        return p<<1;    }    inline int rc(int p){        return p<<1|1;    }        void push_up(int p){        t[p]=t[lc(p)]+t[rc(p)];    }        void update(int x,data k,int left=1,int right=n,int p=1){        if(left==right)            t[p]=k;        else{            int mid=(left+right)>>1;            if(x<=mid)update(x,k,left,mid,lc(p));            else update(x,k,mid+1,right,rc(p));            push_up(p);        }    }        data query(int x,int y,int left=1,int right=n,int p=1){        if(x<=left&&right<=y)            return t[p];        else{            data ans;            int mid=(left+right)>>1;            if(x<=mid)ans=ans+query(x,y,left,mid,lc(p));            if(y>mid)ans=ans+query(x,y,mid+1,right,rc(p));            return ans;        }    }        data tag[MAXN];    inline void f(int p,int left,int right,data d){        tag[p]=tag[p]+d;        t[p]=t[p]+d.x*(right-left+1);    }    inline void push_down(int p,int left,int right){        data& d=tag[p];        int mid=(left+right)>>1;        f(lc(p),left,mid,d);        f(rc(p),mid+1,right,d);        d=data(0);    }        void update(int x,int y,data k,int left=1,int right=n,int p=1){        if(x<=left&&right<=y){            f(p,left,right,k);            return;        }        else{            push_down(p);            int mid=(left+right)>>1;            if(x<=mid)update(x,y,k,left,mid,lc(p));            if(y>mid)update(x,y,k,mid+1,right,rc(p));            push_up(p);        }    }    }~(1<<31)//int 所能到达的最大数 -b=~b+1//x&(-x)//

bzoj 2274

#include
#include
const int MAXN(100010);int n,s[MAXN];struct ovo{ int pos,value;}o[MAXN];inline bool operator<(const ovo& a,const ovo& b){ return a.value
=1&&o[i].value!=o[i-1].value) tot++; s[o[i].pos]=tot; }}const int P(int(1e9+9));int t[MAXN];inline int lowbit(int x){ return x&(-x);}inline void insert(int x,int k){ for(;x<=n;x+=lowbit(x)) t[x]=(t[x]+k)%P;}inline int query(int x){ int ans=0; for(;x;x-=lowbit(x)) ans=(ans+t[x])%P; return ans;}void work(){ f[0]=1; for(int i=1;i<=n;i++) for(int j=0;j
=s[j]) f[i]+=f[j]; printf("%d\n",f[n]); insert(s[0],1); for(int i=1;i

 二维树状数组

#include
int n,m;int t[1100][1100];inline int lowbit(int x){ return x&(-x);}inline void insert(int x,int y,int k){ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=n;j+=lowbit(j)) t[i][j]+=k;}inline int query(int x,int y){ int ans=0; for(int i=x;i;i-=lowbit(i)) for(int j=y;j;j-=lowbit(j)) ans+=t[i][j]; return ans;}int main(){ scanf("%d",&n); while(true){ scanf("%d",&m); if(m==1){ int x,y,k; scanf("%d%d%d",&x,&y,&k); x++,y++; insert(x,y,k); } else if(m==2) { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1++,y1++,x2++,y2++; printf("%d\n",query(x2,y2)-query(x1-1,y2)-query(x2,y1-1)+query(x1-1,y1-1)); } else{ break; } } return 0;}

 

转载于:https://www.cnblogs.com/z360/p/6796432.html

你可能感兴趣的文章
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
基本概念复习
查看>>
重构第10天:提取方法(Extract Method)
查看>>
Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
查看>>
解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
查看>>
多线程day01
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>
MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
第四章 mybatis批量insert
查看>>
Java并发框架——什么是AQS框架
查看>>
【数据库】
查看>>
Win配置Apache+mod_wsgi+django环境+域名
查看>>
linux清除文件内容
查看>>
WindowManager.LayoutParams 详解
查看>>