社区讨论

WA60 QAQ

P1494[国家集训队] 小 Z 的袜子参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi7rgfrh
此快照首次捕获于
2025/11/21 02:24
4 个月前
此快照最后确认于
2025/11/21 02:24
4 个月前
查看原帖
CPP
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=5e4+5;
int n,m,k,c[N],b[N];
ll ans,s[N];
struct DeepDarkFantasy{
    int l,r,id;
    ll x,y;
}q[N];
bool cmp1(DeepDarkFantasy x,DeepDarkFantasy y){
    if(b[x.l]==b[y.l])return x.r<y.r;
    return x.l<y.l;
}
bool cmp2(DeepDarkFantasy x,DeepDarkFantasy y){
    return x.id<y.id;
}
void push(int x,int k){
    ans-=s[c[x]]*s[c[x]];
    s[c[x]]+=k;
    ans+=s[c[x]]*s[c[x]];
}
int main(){
    scanf("%d%d",&n,&m);
    k=sqrt(n);
    for(int i=1;i<=n;i++)scanf("%d",&c[i]),b[i]=(i-1)/k+1;
    for(int i=1;i<=m;i++)scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
    sort(q+1,q+m+1,cmp1);
    for(int i=1,l=1,r=0;i<=m;i++){
        while(r<q[i].r)push(++r,1);
        while(r>q[i].r)push(r--,-1);
        while(l<q[i].l)push(l++,-1);
        while(l>q[i].l)push(--l,1);
        if(q[i].l==q[i].r){
            q[i].x=0;
            q[i].y=1;
            continue;
        }
        q[i].x=ans-(q[i].r-q[i].l+1);
        q[i].y=(q[i].r-q[i].l+1)*(q[i].r-q[i].l)*1ll;
        ll g=__gcd(q[i].x,q[i].y);
        q[i].x/=g;
        q[i].y/=g;
    }
    sort(q+1,q+m+1,cmp2);
    for(int i=1;i<=m;i++)printf("%lld/%lld\n",q[i].x,q[i].y);
}
求助~QAQ

回复

2 条回复,欢迎继续交流。

正在加载回复...