zoukankan      html  css  js  c++  java
  • 主席树 Couriers

    【bzoj3524/2223】[Poi2014]Couriers

    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行,每行对应一个答案。/*

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int sum[10000010],ls[10000010],rs[100000010],root[500010];
    int n,m,sz;
    inline int read()
    {
    char ch=getchar();
    while(!(ch>='0'&&ch<='9'))ch=getchar();
    int x=0;
    while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}
    return x;
    }
    void update(int l,int r,int x,int &y,int v)
    {
    y=++sz;
    sum[y]=sum[x]+1;
    if(l==r)
    return;
    ls[y]=ls[x];
    rs[y]=rs[x];
    int mid=(l+r)>>1;
    if(v<=mid)
    update(l,mid,ls[x],ls[y],v);
    else
    update(mid+1,r,rs[x],rs[y],v);
    }
    int que(int L,int R)
    {
    int l=1,r=n,mid,x,y,tmp=((R-L+1)>>1);
    x=root[L-1];
    y=root[R];
    for(;l!=r;)
    {
    if(sum[y]-sum[x]<=tmp)
    return 0;
    mid=(l+r)>>1;
    if(sum[ls[y]]-sum[ls[x]]>tmp)
    {
    y=ls[y];
    x=ls[x];
    r=mid;
    }
    else if(sum[rs[y]]-sum[rs[x]]>tmp)
    {
    y=rs[y];
    x=rs[x];
    l=mid+1;
    }
    else
    return 0;
    }
    return l;
    }
    int main()
    {
    n=read();m=read();
    for(int i=1;i<=n;i++)
    {
    int x;
    x=read();
    update(1,n,root[i-1],root[i],x);
    }
    for(int i=0;i<m;i++)
    {
    int l,r;
    l=read();
    r=read();
    printf("%d ",que(l,r));
    }
    return 0;
    }*/

  • 相关阅读:
    微软面试题
    20个开源项目托管站点推荐
    iis配置好后,解决打开服务器要输入用户名和密码的问题
    C# 调用带输入输出参数的存储过程
    line-height属性总结
    placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容
    表格使用总结
    网页html结构搭建方法总结
    css中的inline-block
    css常用居中
  • 原文地址:https://www.cnblogs.com/xydddd/p/5143942.html
Copyright © 2011-2022 走看看