```cpp
sort(a+1,a+1+n);
```
这里你a已经排过序了,那后面用 a[R[i]] 加的时候,顺序就不是原来的顺序了
(语文不好表述不清,勿喷)
by wowwowwow @ 2023-01-02 11:54:59
AC 代码
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
using ll=long long;
struct J{
ll a,b,m,id;
bool operator<(const J &nj)const
{
return m<nj.m;
}
}a[maxn+10];
ll R[maxn+10],n, ta[maxn + 10], tb[maxn + 10];
int main(){
scanf("%lld",&n);
for(int i=1; i<=n; ++i) {
scanf("%lld",&a[i].a);
a[i].id=i;
}
for(int i=1; i<=n; ++i) {
scanf("%lld",&a[i].b);
}
for(int i=1; i<=n; ++i) {
a[i].m=min(a[i].a,a[i].b);
ta[i] = a[i].a; tb[i] = a[i].b;
}
sort(a+1,a+1+n);
int i=1,j=n;
for(int k=1; k<=n; ++k) {
if(a[k].m==a[k].a) {
/*error1*/
R[i++]=a[k].id;
} else {
R[j--]=a[k].id;
}
}
ll A=0,B=0;
for(i=1; i<=n; ++i) {
A+= ta[R[i]];B=max(A,B);B += tb[R[i]];
}
printf("%lld\n",B);
for(i=1; i<=n; ++i) {
printf("%lld ",R[i]);
}
return 0;
}
```
by wowwowwow @ 2023-01-02 12:00:30