• bzoj3524: [Poi2014]Couriers


    主席树简单题。(%Xs酱。我的主席树就跟他?(她?写了。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define REP(i,s,t) for(int i=s;i<=t;i++)
    #define clr(x,c) memset(x,c,sizeof(x))
    int read(){
    	int x=0;char c=getchar();bool f=true;
    	while(!isdigit(c)) c=getchar();
    	while(isdigit(c)) x=x*10+c-'0',c=getchar();
    	return f?x:-x;
    } 
    struct node{
    	int lson,rson,cnt;
    };
    node nodes[10000000];
    int pt=0,root[500005];
    void insert(int a,int &b,int x,int l,int r){
    	nodes[++pt]=nodes[a],b=pt,++nodes[b].cnt;
    	if(l==r) return ;
    	int mid=(l+r)>>1;
    	if(x<=mid) insert(nodes[a].lson,nodes[b].lson,x,l,mid);
    	else insert(nodes[a].rson,nodes[b].rson,x,mid+1,r);
    }
    int query(int a,int b,int x,int l,int r){
    	if(l==r) return l;
    	int mid=(l+r)>>1;
    	if(nodes[nodes[b].lson].cnt-nodes[nodes[a].lson].cnt>x) 
    	  return query(nodes[a].lson,nodes[b].lson,x,l,mid);
    	if(nodes[nodes[b].rson].cnt-nodes[nodes[a].rson].cnt>x)
    	  return query(nodes[a].rson,nodes[b].rson,x,mid+1,r);
    	return 0;
    }
    int main(){
    	int u,v,d,n=read(),m=read();
    	REP(i,1,n) u=read(),insert(root[i-1],root[i],u,1,n);
    	REP(i,1,m){
    		u=read(),v=read();
    		if(u>v) swap(u,v);
    		printf("%d
    ",query(root[u-1],root[v],(v-u+1)>>1,1,n));
    	}
    	return 0;
    }
    

      

    3524: [Poi2014]Couriers

    Time Limit: 20 Sec  Memory Limit: 256 MB
    Submit: 1677  Solved: 584
    [Submit][Status][Discuss]

    Description

    给一个长度为n的序列a。1≤a[i]≤n。
    m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2。如果存在,输出这个数,否则输出0。

    Input

    第一行两个数n,m。
    第二行n个数,a[i]。
    接下来m行,每行两个数l,r,表示询问[l,r]这个区间。

    Output

    m行,每行对应一个答案。

    Sample Input

    7 5
    1 1 3 2 3 4 3
    1 3
    1 4
    3 7
    1 7
    6 6

    Sample Output

    1
    0
    3
    0
    4

    HINT

    【数据范围】

    n,m≤500000


    2016.7.9重设空间,但未重测!


    Source

    [Submit][Status][Discuss]
  • 相关阅读:
    3. 无重复字符的最长子串
    24. 两两交换链表中的节点
    2. 两数相加
    23. 合并K个排序链表
    synergy配置 Ubuntu作Server, Win 7作client
    ros与下位机通信常用的c++ boost串口应用
    tar
    发布里程计传感器信息
    ROS TF——learning tf
    在linux终端下打开pdf文件
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5712943.html
Copyright © 2020-2023  润新知