```cpp
#include<bits/stdc++.h>
using namespace std;
int findSample(int n,int* a,int* b,int* opt){
b[0]=0;
while(--n)
if(!opt[n])b[0]+=a[n],a[b[n]]=max(0,a[b[n]]-a[n]);
else if(opt[n]==1)a[b[n]]+=a[n];
else a[b[n]]=max(a[b[n]],a[n]);
return b[0]+a[0];
}
```
Update:有同学发现上面的代码会用到编译器的临时空间,写了个疑似不需要辅助空间的代码:
```cpp
int findSample(int n, int a[], int b[], int opt[]) {
*b = 0;
while (--n) {
opt += n;
if (*opt) {
if (*opt &= 1) {
a += n, *opt = *a, a -= n;
b += n, a += *b;
*a += *opt;
a -= *b, b -= n;
} else {
a += n, *opt = *a, a -= n;
b += n;
a += *b, *opt -= *a, a -= *b;
*opt *= -1;
*opt >>= 31;
if (*opt) {
a += n, *opt = *a, a -= n;
a += *b, *a = *opt, a -= *b;
}
b -= n;
}
} else {
a += n, *b += *a, a -= n;
b += n;
a += n, *opt = *a, a -= n;
a += *b;
*a -= *opt;
*opt = *a, *opt >>= 31;
if (*opt) *a = 0;
a -= *b;
b -= n;
}
opt -= n;
}
return *b += *a;
}
```