zoukankan      html  css  js  c++  java
  • BZOJ.3524.[POI2014]Couriers(主席树)

    题目链接

    //119964kb	5780ms
    //主席树裸题啊。。
    #include <cstdio>
    #include <cctype>
    #define gc() getchar()
    const int N=5e5+5,S=N*20;
    
    int n,m,root[N];
    namespace T
    {
    	#define lson son[rt][0]
    	#define rson son[rt][1]
    
    	int tot,sz[S],son[S][2];
    	void Insert(int rt,int &y,int l,int r,int p)
    	{
    		sz[y=++tot]=sz[rt]+1;
    		if(l<r){
    			int m=l+r>>1;
    			if(p<=m) son[y][1]=rson, Insert(lson,son[y][0],l,m,p);
    			else son[y][0]=lson, Insert(rson,son[y][1],m+1,r,p);
    		}
    	}
    	int Query(int x,int y,int l,int r,int k)
    	{
    //		if(sz[y]-sz[x]<=k) return 0;
    		if(l==r) return l;//直接只在>时递归,不用判那么多。
    		if(sz[son[y][0]]-sz[son[x][0]]>k) return Query(son[x][0],son[y][0],l,l+r>>1,k);
    		else if(sz[son[y][1]]-sz[son[x][1]]>k) return Query(son[x][1],son[y][1],(l+r>>1)+1,r,k);
    		return 0;
    	}
    	
    }
    inline int read()
    {
    	int now=0;register char c=gc();
    	for(;!isdigit(c);c=gc());
    	for(;isdigit(c);now=now*10+c-'0',c=gc());
    	return now;
    }
    
    int main()
    {
    	n=read(),m=read();
    	for(int a,i=1; i<=n; ++i) a=read(),T::Insert(root[i-1],root[i],1,n,a);
    	int l,r;
    	while(m--)
    		l=read(),r=read(),printf("%d
    ",T::Query(root[l-1],root[r],1,n,(r-l+1)>>1));
    	return 0;
    }
    
  • 相关阅读:
    VBA开发手记
    爬虫之Scrapy框架
    RPA 介绍
    MongoDB入门
    爬虫项目汇总
    coding基本功实践
    wxpy使用
    爬虫-工具篇
    SQLAlchemy使用介绍
    wtforms组件使用实例及源码解析
  • 原文地址:https://www.cnblogs.com/SovietPower/p/8649203.html
Copyright © 2011-2022 走看看