博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2038 小Z的袜子(hose)(分组)
阅读量:6593 次
发布时间:2019-06-24

本文共 1206 字,大约阅读时间需要 4 分钟。

题目链接:

题意:给出n个袜子。m个询问,每个询问一个区间[L,R],询问这个区间中任意拿出两个袜子相同的概率。

思路:令x=sqrt(n),每x个分成一组。将询问按照L放到相应的组中。同一组内按照R升序。这样一组内最多向右移动n的长度,向左移动都在本组内,最大x。总复杂度n*sqrt(n)。

struct node
{
    int L,R,id;
    node(){}
    node(int _L,int _R,int _id)
    {
        L=_L;
        R=_R;
        id=_id;
    }
};
int a[N],n,m;
vector<node> V[N];
int cmp(node a,node b)
{
    return a.R<b.R;
}
u64 ans[N];
int b[N],L[N],R[N];
u64 C(int x)
{
    return (u64)x*(x-1)/2;
}
u64 Gcd(u64 x,u64 y)
{
    if(!y) return x;
    return Gcd(y,x%y);
}
int main()
{
    RD(n,m);
    int i;
    FOR0(i,n) RD(a[i]);
    int len=sqrt(1.0*n+0.5);
    int s=n/len+(n%len!=0);
    int x,y;
    FOR1(i,m)
    {
        RD(x,y); x--,y--; L[i]=x; R[i]=y;
        V[x/len].pb(node(x,y,i));
    }
    int j,k,curL,curR;
    u64 pre;
    FOR0(i,s)
    {
        clr(b,0); curL=i*len,curR=curL-1; pre=0;
        sort(V[i].begin(),V[i].end(),cmp);
        FOR0(j,SZ(V[i]))
        {
            x=V[i][j].L;
            y=V[i][j].R;
            k=V[i][j].id;
            ans[k]=pre;
            while(curR<y)
            {
                curR++;
                ans[k]-=C(b[a[curR]]);
                b[a[curR]]++;
                ans[k]+=C(b[a[curR]]);
            }
            while(curL<x)
            {
                ans[k]-=C(b[a[curL]]);
                b[a[curL]]--;
                ans[k]+=C(b[a[curL]]);
                curL++;
            }
            while(curL>x)
            {
                curL--;
                ans[k]-=C(b[a[curL]]);
                b[a[curL]]++;
                ans[k]+=C(b[a[curL]]);
            }
            pre=ans[k];
        }
    }
    u64 temp,p,q;
    FOR1(i,m)
    {
        p=ans[i];
        q=C(R[i]-L[i]+1);
        temp=Gcd(p,q);
        p/=temp; q/=temp;
        printf("%llu/%llu\n",p,q);
    }
}

转载地址:http://wjkio.baihongyu.com/

你可能感兴趣的文章
nodejs log4js配置使用
查看>>
Swift 代码小抄
查看>>
git小技巧--如何从其他分支merge个别文件或文件夹
查看>>
微信小程序——gulp处理文件
查看>>
ThoughtWorks技术雷达专区
查看>>
苏宁11.11:苏宁易购移动端的架构优化实践
查看>>
GitLab发布11.6版本,支持无服务器功能部署
查看>>
Elixir 1.3带来新的语言功能、API和改进后的工具
查看>>
旧瓶新酒之业务入云不简单
查看>>
ASP.NET Core 2加入了Razor页面特性
查看>>
一个“小白”眼中的容器
查看>>
公有云还能信任吗?Azure遭雷击中断超过一天
查看>>
PHP 8引入JIT支持,以提高CPU性能
查看>>
Juval Löwy:为什么每个类都应该是一个服务
查看>>
用JEP 343打包工具,构建自包含、可安装的Java应用程序
查看>>
TOP 13大最热开源微服务Java框架
查看>>
微服务落地,我们在考虑什么?\n
查看>>
Adaptive Execution让Spark SQL更高效更好用
查看>>
艰困之道中学到的经验教训
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>