样例过了但提交上去全部TLE QAQ
#include<bits/stdc++.h>
using namespace std;
struct node{
int le;
int rg;
int cha;
friend bool operator<(node e,node t){
if(e.cha==t.cha){
return e.le<t.le;
}
else{
return e.cha>t.cha;
}
}
};
priority_queue<node>q;
const int MAX=200005;
string s;
int n,a[MAX],b[MAX],vis[MAX],dan1[MAX],dan2[MAX],tot;
inline int read()
{
int x=0;
bool f=false;
char g=getchar();
for(;!isdigit(g);g=getchar())if(g=='-')f=true;
for(;isdigit(g);g=getchar())x=(x<<3)+(x<<1)+(g^48);
if(f)return -x;
return x;
}
int main(){
n=read();cin>>s;
for(int i=1;i<=n;i++){
if(s[i-1]=='B')a[i]=1;
else a[i]=0;
}
for(int i=1;i<=n;i++){
b[i]=read();
}
for(int i=1;i<n;i++){
if(a[i]!=a[i+1]){
q.push((node){i,i+1,abs(b[i+1]-b[i])});
}
}
while(!q.empty()){
int x=q.top().le;
int y=q.top().rg;
q.pop();
if(!vis[x]&&!vis[y]){
vis[x]=1;vis[y]=1;
dan1[++tot]=x;dan2[tot]=y;
}
while(x>0&&vis[x])x--;
while(y<=n&&vis[y])y++;
if(a[x]!=a[y])q.push((node){x,y,abs(b[x]-b[y])});
}
printf("%d\n",tot);
for(int i=1;i<=tot;i++){
printf("%d %d\n",dan1[i],dan2[i]);
}
return 0;
}
请各位dalao救救孩子吧