zoukankan      html  css  js  c++  java
  • T107741 【模板】权值线段树合并

    题目地址


    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int MAXN=1e6;
    struct Node{
    	int ls,rs;
    	int val,pos;
    }tr[MAXN*20*4];
    int nodeCnt=0;
    void insert(int &p,int l,int r,int x,int val){
    	if(!p)p=++nodeCnt;
    	if(l==r){
    		tr[p].val+=val;
    		tr[p].pos=l;
    		return;
    	}
    	int mid=(l+r)>>1;
    	if(x<=mid)insert(tr[p].ls,l,mid,x,val);
    	else if(x>mid)insert(tr[p].rs,mid+1,r,x,val);
    	tr[p].val=max(tr[tr[p].ls].val,tr[tr[p].rs].val);
    	tr[p].pos=tr[tr[p].ls].val>=tr[tr[p].rs].val?tr[tr[p].ls].pos:tr[tr[p].rs].pos;
    }
    int merge(int p,int q,int l,int r){
    	if(!p)return q;
    	if(!q)return p;
    	if(l==r){
    		tr[p].val+=tr[q].val;
    		tr[p].pos=tr[p].val?l:0;
    		return p;
    	}
    	int mid=(l+r)>>1;
    	tr[p].ls=merge(tr[p].ls,tr[q].ls,l,mid);
    	tr[p].rs=merge(tr[p].rs,tr[q].rs,mid+1,r);
    	tr[p].val=max(tr[tr[p].ls].val,tr[tr[p].rs].val);
    	tr[p].pos=tr[tr[p].ls].val>=tr[tr[p].rs].val?tr[tr[p].ls].pos:tr[tr[p].rs].pos;
    	return p;
    }
    int roots[MAXN],rootCnt=0;
    int main(){
    	int n;
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		int opt;
    		cin>>opt;
    		if(opt==1){//新建线段树 
    			roots[++rootCnt]=++nodeCnt;
    		}else if(opt==2){//向某棵线段树中加入值 
    			int nowRoot,x,num;
    			scanf("%d%d%d",&nowRoot,&x,&num);
    			insert(roots[nowRoot],1,MAXN,x,num);
    		}else if(opt==3){//查询某棵线段树中出现最多的是哪个值 
    			int nowRoot;
    			scanf("%d",&nowRoot);
    			cout<<tr[roots[nowRoot]].pos<<endl;
    		}else if(opt==4){//合并两棵线段树 
    			int root1,root2;
    			scanf("%d%d",&root1,&root2);
    			roots[++rootCnt]=merge(root1,root2,1,MAXN);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    mysql 数据库【目录】
    Django 模板层
    Django文件下载(通过反向解析)
    Django 的路由系统
    Linux 搭建Django环境 + nginx + virtualenv虚拟环境
    layui 框架之秒传文件 (前端分段 MD5 型成秒传)
    Bootstrap 使用小点总结
    Django 之数据表操作
    前端之旅【目录】
    学习中遇到的小坑坑
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11811236.html
Copyright © 2011-2022 走看看