RT,本人写的堆编译不通过
可能是我太弱了
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+1;
int n,b[N],ans[N][2],cnt;
char a[N];
bool f[N];
struct node{
int x,y;
bool operator<(node a) const{
if(abs(b[x]-b[y])!=abs(b[a.x]-b[a.y]))return abs(b[x]-b[y])<abs(b[a.x]-b[a.y]);
return x<a.x;
}
};
priority_queue<int,vector<node>,greater<node> > q;
int main()
{
scanf("%d%s",&n,a+1);
for(int i=1;i<=n;i++)scanf("%d",&b[i]);
for(int i=1;i<n;i++)if(a[i]!=a[i+1])q.push((node){i,i+1});
while(!q.empty())
{
node t=q.top();
q.pop();
if(f[t.x]||f[t.y])continue;
f[t.x]=f[t.y]=1,cnt+=1,ans[cnt][0]=t.x,ans[cnt][1]=t.y;
if(a[t.x-1]!=a[t.y+1]&&t.x>1&&t.y<n)q.push((node){t.x-1,t.y+1});
}
for(int i=1;i<=cnt;i++)
{
for(int j=0;j<2;j++)printf("%d ",ans[i][j]);
printf("\n");
}
}