#include using namespace std; struct Actor { int num; long long cost; int first = -1, last = -1; int sceneCount = 0; }; struct Scene { int id; int people = 0; bool used = false; }; bool comp(Actor A, Actor B) { if (A.sceneCount == B.sceneCount) return A.cost > B.cost; return A.sceneCount < B.sceneCount; } bool comp1(Scene A, Scene B) { return A.people > B.people; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("star.in", "r", stdin); freopen("star.out", "w", stdout); int N, M, actorId; cin>>N>>M; vector actors(N+1); for(int i=1; i<=N; i++) { cin>>actors[i].cost; actors[i].num = i; } vector > scenes(M+1); vector s(M+1); for (int i=1; i<=M; i++) { int br; cin>>br; s[i].id = i; s[i].people = br; scenes[i].resize(br); for (int j=0; j>scenes[i][j]; actorId = scenes[i][j]; if (actors[actorId].first == -1) { actors[actorId].first = i; } actors[actorId].last = i; actors[actorId].sceneCount++; } } sort(actors.begin()+1, actors.end(), comp); set available; for (int i = 1; i <= M; i++) available.insert(i); vector order; for (const auto &actor : actors) { if (actor.first == -1) continue; for (int i = actor.first; i <= actor.last; i++) { if (available.count(i)) { order.push_back(i); available.erase(i); s[i].used = true; } } } sort(s.begin()+1, s.end(), comp1); for(int i=1; i<=M; i++) { if(s[i].used == false) { order.push_back(s[i].id); s[i].used = true; } } for (int i=0; i0) cout <<" "; cout<