#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define stop exit(0) #define nc -1 #define eps 1e-10 #define inf 1000000000 #define mod 1000000007 #define mp make_pair #define fill(array,value) memset(array,value,sizeof(array)) #define f(i,beg,end) for(int i=beg; i<=end; i++) #define F(i,beg,end) for(int i=beg; i>=end; i--) #define Max(a,b) ( (a>b)?a:b ) #define Min(a,b) ( (a h, pos; vector < Node > place; map sitter; int used[127*1024]; void init() { cin >> n >> k; h.resize(n); pos.resize(k); f(i,0,k-1) { cin >> pos[i]; place.push_back(Node(pos[i],2,i+1)); } f(i,0,k) { cin >> h[i]; place.push_back(Node(h[i],1,i+1)); } } bool cmp(const Node &a, const Node &b) { if (a.val != b.val) return a.val < b.val; if (a.type != b.type) return a.type < b.type; } void solve() { fill(used,0); sort(place.begin(),place.end(),cmp); int ind = place.size()-1; while (place[ind].type != 2) { ind--; } f(i,0,place.size()-1) if (place[i].type == 2 && place[i].val > place[ind].val) ind = i; stack sits; sits.push(place[ind]); used[ind] = 1; while (sitter.size() < k) { ind--; if (ind == -1) ind = place.size()-1; if (used[ind]) continue; used[ind] = 1; int pos = place[ind].val; int t = place[ind].type; if (t==2) { sits.push(place[ind]); } else { if (!sits.empty()) { Node chair = sits.top(); sitter[place[ind].index] = chair.val; sits.pop(); } else { // TODO what if we don't have enough sits? used[ind] = 0; } } } // for(map::iterator it = sitter.begin(); it != sitter.end(); it++) { // cout << h[it->first - 1] << " sits on " << it->second << endl; // } fill(used,0); for(map::iterator it = sitter.begin(); it != sitter.end(); it++) { used[h[it->first - 1]]++; if (it -> second == pos[0]) { cout << it->first << endl; } } f(i,0,k-1) if (!used[h[i]]) { cout << i+1 << endl; // f(j,1,) } } int main() { // input("test.txt"); input("birthday.in"); output("birthday.out"); int numberOfTests = 1; // cin >> numberOfTests; f(i,1,numberOfTests) { init(); solve(); } return 0; }