社区讨论
RE求助,,,,,
P1494[国家集训队] 小 Z 的袜子参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo1xktkj
- 此快照首次捕获于
- 2023/10/23 04:38 2 年前
- 此快照最后确认于
- 2023/11/03 05:04 2 年前
CPP
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int c[50005],B,cnt[50005];
struct node{
int l,r,id;
}a[50005];
bool cmp(node a,node b){
if((a.l/B)!=(b.l/B))return (a.l/B)<(b.l/B);
else return a.r<b.r;
}
ll C(int x){
if(x<2)return 0;
return x*1ll*(x-1);
}ll ans[50005],as[50005];
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
int main(){
// freopen("P1491_1.in","r",stdin);
// freopen("P1491.out","w",stdout);
int n,m,l=0,r=0;
ll sum=0;
scanf("%d%d",&n,&m);
B=sqrt(n);
for(int i=1; i<=n; i++)scanf("%d",&c[i]);
for(int i=1; i<=m;i++){
scanf("%d %d",&a[i].l,&a[i].r);
a[i].id=i;
}
sort(a+1,a+1+m,cmp);
for(int i=1; i<=m; i++){
if(a[i].l==a[i].r){
l=a[i].l;
r=a[i].r;
as[a[i].id]=1;
ans[a[i].id]=0;
sum=0;
continue;
}
while(l>a[i].l){
sum-=C(cnt[c[--l]]);
sum+=C(++cnt[c[l]]);
}
while(l<a[i].l){
sum-=C(cnt[c[l]]);
sum+=C(--cnt[c[l++]]);
}
while(r<a[i].r){
sum-=C(cnt[c[++r]]),
sum+=C(++cnt[c[r]]);
}
while(r>a[i].r){
sum-=C(cnt[c[r]]);
sum+=C(--cnt[c[r--]]);
}
ans[a[i].id]=sum;
as[a[i].id]=C(r-l+1);
}
for(int i=1; i<=m; i++){
if(as[i]==0)as[i]=2;
ll d=gcd(ans[i]/2,as[i]/2);
printf("%lld/%lld\n",ans[i]/2/d,as[i]/2/d);
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...