0pts#11AC,大佬,求调_/\_
查看原帖
0pts#11AC,大佬,求调_/\_
1611806
LICHENXISHABI楼主2025/8/31 11:44

大佬帮蒟蒻一把吧_/\_

#include<bits/stdc++.h>
using namespace std;
bool x[200010],d[200010];
int a[200010];
int l[200010],r[200010];
int main(){
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    int n,sum=0;
    cin>>n;
    vector<pair<int,int>> ans;
    char op;
    d[0]=1;
    for(int i=1;i<=n;i++) cin>>op,x[i]=(op=='B');
    cin>>a[1];
    for(int i=2;i<=n;i++){
        cin>>a[i];
        l[i]=i-1,r[i]=i,r[i-1]=0;
        if(x[i]!=x[i-1]) q.push({abs(a[i]-a[i-1]),i});
    }
    while(q.size()){
        auto[c,w]=q.top();
        q.pop();
        if(d[w]==1||d[l[w]]==1) continue;
        sum++;
        ans.push_back({l[w],w});
        d[l[w]]=d[w]=1;
        if(l[l[w]]!=0&&r[w]!=0){
            r[l[l[w]]]=r[w];
            l[r[w]]=l[l[w]];
            if(x[l[l[w]]]!=x[r[w]]) q.push({abs(a[l[l[w]]]-a[r[w]]),r[w]});
        }
    }
    cout<<sum<<endl;
    for(auto i:ans){
        cout<<i.first<<" "<<i.second<<endl;
    }
    return 0;
}
2025/8/31 11:44
加载中...