国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Cogs 1345. [ZJOI2013] K大數(shù)查詢(樹套樹)

2019-11-11 07:47:30
字體:
供稿:網(wǎng)友
[ZJOI2013] K大數(shù)查詢 這里寫圖片描述 /*樹套樹寫法.bzoj過不了.可能有負(fù)數(shù)要離散吧.線段樹套線段樹.外層權(quán)值線段樹,內(nèi)層區(qū)間線段樹維護(hù)標(biāo)記.對權(quán)值建一棵權(quán)值線段樹.某個點表示權(quán)值在某個范圍內(nèi)的數(shù)的個數(shù).然后對每個點建一棵區(qū)間線段樹.表示該權(quán)值范圍在某個區(qū)間的數(shù)的個數(shù).然后查找用類似二分的思想.*/#include<iostream>#include<cstdio>#define MAXN 50001using namespace std;struct data{int lc,rc,sum,size,bj;}tree[MAXN*400];int n,m,root[MAXN],cut;int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*f;}void push(int k,int l,int r){ if(!tree[k].lc) tree[k].lc=++cut; if(!tree[k].rc) tree[k].rc=++cut; tree[tree[k].lc].bj+=tree[k].bj; tree[tree[k].rc].bj+=tree[k].bj; int mid=(l+r)>>1; tree[tree[k].lc].sum+=(mid-l+1)*tree[k].bj; tree[tree[k].rc].sum+=(r-mid)*tree[k].bj; tree[k].bj=0; return ;}void add(int &k,int l,int r,int x,int y){ if(!k) k=++cut; if(x==l&&r==y) { tree[k].bj++; tree[k].sum+=r-l+1; return ; } if(tree[k].bj) push(k,l,r); int mid=(l+r)>>1; if(y<=mid) add(tree[k].lc,l,mid,x,y); else if(x>mid) add(tree[k].rc,mid+1,r,x,y); else add(tree[k].lc,l,mid,x,mid),add(tree[k].rc,mid+1,r,mid+1,y); tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum; return ;}void sloveadd(int x,int y,int z)//先找到它所在權(quán)值的位置然后在[x,y]處加入貢獻(xiàn).{ int l=1,r=n,k=1,mid; while(l!=r) { mid=(l+r)>>1; add(root[k],1,n,x,y); if(z<=mid) r=mid,k=k<<1; else l=mid+1,k=(k<<1)+1; } add(root[k],1,n,x,y); return ;}int query(int k,int l,int r,int x,int y){ if(!k) return 0; if(tree[k].bj) push(k,l,r); if(x<=l&&r<=y) return tree[k].sum; int tot=0,mid=(l+r)>>1; if(x<=mid) tot+=query(tree[k].lc,l,mid,x,y); if(y>mid) tot+=query(tree[k].rc,mid+1,r,x,y); return tot;}int slovequery(int x,int y,int z){ int l=1,r=n,k=1; while(l!=r) { int mid=(l+r)>>1; int t=query(root[k<<1],1,n,x,y); if(t>=z) r=mid,k<<=1; else l=mid+1,k=(k<<1)+1,z-=t; } return l;}int main(){ freopen("zjoi13_sequence.in","r",stdin); freopen("zjoi13_sequence.out","w",stdout); int k,x,y,z; n=read(),m=read(); while(m--) { k=read(),x=read(),y=read(),z=read(); if(k&1) sloveadd(x,y,n-z+1); else
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾源县| 镇雄县| 肥西县| 曲水县| 商河县| 广东省| 徐水县| 铁力市| 高雄市| 康保县| 将乐县| 曲水县| 射洪县| 常宁市| 高州市| 邛崃市| 阳朔县| 麻城市| 土默特左旗| 岳阳市| 杭州市| 盖州市| 马公市| 东乡县| 兰州市| 西青区| 庆安县| 依安县| 彰武县| 东港市| 安化县| 池州市| 寿宁县| 奉化市| 石阡县| 云阳县| 开原市| 张北县| 育儿| 璧山县| 武汉市|