社区讨论
E求条(有效悬5关)
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkid12mv
- 此快照首次捕获于
- 2026/01/17 21:45 上个月
- 此快照最后确认于
- 2026/01/20 21:45 4 周前
rt,归并排序连样例都没过
CPPstring s;
int n;
ll as[10000000],bs[10000000],c[10000000],t[10000000],ans=0;
void msort(int l,int r){
if(l==r){
return;
}
int mid=(l+r)/2;
int i=l,j=mid+1,k=l;
msort(l,mid);
msort(mid+1,r);
while(i<=mid&&j<=r){
if(c[i-1]>=c[j]){
t[k++]=c[i++];
}else{
t[k++]=c[j++];
ans+=mid-i+1;
}
}
while(i<=mid){
t[k++]=c[i++];
}
while(j<=r){
t[k++]=c[j++];
}
for(int i=l;i<=r;i++){
c[i]=t[i];
}
}
int main(){
fastrd
//struct _timeb T;
//_ftime(&T);
//srand(T.millitm);
cin>>n>>s;
for(int i=0;i<n;i++){
as[i+1]=as[i]+(s[i]=='A'?1:0);
bs[i+1]=bs[i]+(s[i]=='B'?1:0);
c[i+1]=as[i+1]-bs[i+1];
}
msort(1,n);
cout<<ans;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...