• [CF911G] Mass Change Queries


    线段树合并裸题

    #include <bits/stdc++.h>
    const int N=2e5+5;
    
    int tot,rt[101],ans[N];
    struct Node {int ls,rs;} t[N*200];
    
    void insert(int&x,int l,int r,int p) {
    	if(!x) x=++tot; 
    	if(l==r) return;
    	int mid=(l+r)>>1;
    	if(p<=mid) insert(t[x].ls,l,mid,p);
    	else insert(t[x].rs,mid+1,r,p);
    }
    void merge(int&x,int&y,int l,int r) {
    	if(!x) return;
    	if(!y) {y=x; x=0; return;}
    	if(l==r) return;
    	int mid=(l+r)>>1;
    	merge(t[x].ls,t[y].ls,l,mid);
    	merge(t[x].rs,t[y].rs,mid+1,r);
    	x=0;
    }
    void move(int&x,int&y,int l,int r,int L,int R) {
    	if(!x) return;
    	if(L<=l&&r<=R) return merge(x,y,l,r);
    	if(!y) y=++tot;
    	int mid=(l+r)>>1;
    	if(L<=mid) move(t[x].ls,t[y].ls,l,mid,L,R);
    	if(mid<R) move(t[x].rs,t[y].rs,mid+1,r,L,R);
    }
    void release(int x,int l,int r,int T) {
    	if(!x) return;
    	if(l==r) {ans[l]=T; return;}
    	int mid=(l+r)>>1;
    	release(t[x].ls,l,mid,T);
    	release(t[x].rs,mid+1,r,T);
    }
    
    int main() {
    	int n,Q;
    	scanf("%d",&n);
    	for(int x,i=1; i<=n; ++i) {
    		scanf("%d",&x);
    		insert(rt[x],1,n,i);
    	}
    	scanf("%d",&Q);
    	for(int l,r,x,y; Q--; ) {
    		scanf("%d%d%d%d",&l,&r,&x,&y);
    		if(x!=y) // 注意被卡
    			move(rt[x],rt[y],1,n,l,r);
    	}
    	for(int i=1; i<=100; ++i) release(rt[i],1,n,i);
    	for(int i=1; i<=n; ++i) printf("%d ",ans[i]);
    	return 0;
    }
    
  • 相关阅读:
    caffe中的sgd,与激活函数(activation function)
    image retrieval数据集
    八卦
    caffe的损失函数
    caffe的输入
    rcnn spp_net hcp
    js实现幻灯片播放图片示例代码
    Checbox的操作含已选、未选及判断代码
    shell中case的用法学习笔记
    linux bash shell中case语句的实例
  • 原文地址:https://www.cnblogs.com/nosta/p/11043501.html
Copyright © 2020-2023  润新知