社区讨论
第一次打莫队,最后一个点T了,求大佬帮忙指导卡常
P1494[国家集训队] 小 Z 的袜子参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lospppt7
- 此快照首次捕获于
- 2023/11/10 22:27 2 年前
- 此快照最后确认于
- 2023/11/11 17:48 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+10;
int gcd(int a,int b){
if(a==0||b==0)return max(a,b);
return gcd(min(a,b),max(a,b)%min(a,b));
}
int a[N],n,m;
struct node{
int l,r,lk,id,ans;
}q[N];
int ans,tong[N];
void myin(const int &x){
ans+=tong[a[x]];tong[a[x]]++;
}
void myout(const int &x){
tong[a[x]]--;ans-=tong[a[x]];
}
bool cmp(const node &a,const node &b){
return (a.lk==b.lk)?(a.r<=b.r):(a.lk<=b.lk);
}
bool cmp2(const node &a,const node &b){
return a.id<=b.id;
}
int head=1,tail=0;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&q[i].l,&q[i].r);q[i].lk=q[i].l/(sqrt(n));q[i].id=i;
}
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;i++){
while(tail<q[i].r)myin(++tail);
while(head>q[i].l)myin(--head);
while(tail>q[i].r)myout(tail--);
while(head<q[i].l)myout(head++);
q[i].ans=ans;
}
sort(q+1,q+m+1,cmp2);
for(int i=1;i<=m;i++){
int num1=q[i].r-q[i].l+1,num2=num1*(num1-1)/2,num3=gcd(q[i].ans,num2);
if(q[i].l==q[i].r)printf("0/1\n");
else printf("%lld/%lld\n",q[i].ans/num3,num2/num3);
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...