zoukankan      html  css  js  c++  java
  • 小Z的袜子(题解)(莫队)

    小Z的袜子(题解)(莫队)

    Junlier良心莫队

    题目

    luoguP1494 [国家集训队]小Z的袜子

    code

    #include<bits/stdc++.h>
    #define lst long long
    #define ldb double
    #define N 50050
    using namespace std;
    const int Inf=1e9;
    int read()
    {
        int s=0,m=0;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}
        while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
        return m?-s:s;
    }
    
    int n,m,unit;lst Ans;
    int col[N],bl[N];lst sum[N];
    struct Ques{lst A,B;int le,ri,id;}ljl[N];
    bool cmp_Q (Ques a,Ques b){return bl[a.le]==bl[b.le]?a.ri<b.ri:a.le<b.le;}
    bool cmp_id(Ques a,Ques b){return a.id<b.id;}
    void Update(int now,int xx)
    {
        Ans-=sum[col[now]]*sum[col[now]];
        sum[col[now]]+=xx;
        Ans+=sum[col[now]]*sum[col[now]];
    }
    
    int main()
    {
        n=read(),m=read();unit=sqrt(n);
        for(int i=1;i<=n;++i)
            col[i]=read(),bl[i]=(i/unit)+1;
        for(int i=1;i<=m;++i)
            ljl[i]=(Ques){0,0,read(),read(),i};
        sort(ljl+1,ljl+m+1,cmp_Q);
    
        int le=1,ri=0;
        for(int i=1;i<=m;++i)
        {
            while(le<ljl[i].le)Update(le,-1) ,le++;
            while(le>ljl[i].le)Update(le-1,1),le--;
            while(ri<ljl[i].ri)Update(ri+1,1),ri++;
            while(ri>ljl[i].ri)Update(ri,-1) ,ri--;
    
            if(ljl[i].le==ljl[i].ri){ljl[i].A=0,ljl[i].B=1;continue;}
            ljl[i].A=Ans-(ljl[i].ri-ljl[i].le+1);
            ljl[i].B=1ll*(ljl[i].ri-ljl[i].le)*(ljl[i].ri-ljl[i].le+1);
            lst gcd=__gcd(ljl[i].A,ljl[i].B);
            ljl[i].A/=gcd,ljl[i].B/=gcd;
        }
        
        sort(ljl+1,ljl+m+1,cmp_id);
        for(int i=1;i<=m;++i)
            printf("%lld/%lld
    ",ljl[i].A,ljl[i].B);
        return 0;
    }
    
  • 相关阅读:
    图像处理基础2
    c++之morphologyEx(形态学操作)
    图像处理基础
    Mac 安装QT
    Qmake VS Cmake
    g++,qmake,cmake区别
    C++11中的匿名函数(lambda函数,lambda表达式)
    c++相关要点
    spritekit基础节点学习
    spriteKit简单学习
  • 原文地址:https://www.cnblogs.com/cjoierljl/p/9665186.html
Copyright © 2011-2022 走看看