Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int, int> pii;
- #define ff first
- #define ss second
- #define y1 y111
- #define X first
- #define Y second
- #define mk make_pair
- #define inb push_back
- #define all(v) v.begin(), v.end()
- const int MAXN = (int)1e6 + 9, MAXN1 = (int)2e4 + 7;
- const int INFint = (int)1e9 + 7, P = 31;
- const ll INFll = (ll)1e18 + 7, MOD = (ll)1e9 + 7;
- const double INFfl = 1e18 * 4 + 7;
- const double EPS = 1e-7;
- const double PI = atan2(0, -1);
- int solve();
- int main()
- {
- #define TASK ""
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #else
- //freopen(TASK".in", "r", stdin), freopen(TASK".out", "w", stdout);
- #endif
- solve();
- }
- const int STRBUF = (int)1e6 + 7;
- char buf[STRBUF];
- string get_str()
- {
- scanf(" %s", buf);
- return string(buf);
- }
- struct Socket
- {
- int x;
- int id, cnt;
- Socket() {};
- Socket(int x, int id) : x(x), id(id), cnt(0) {};
- bool operator< (const Socket &a) const
- {
- if (x == a.x)
- {
- if (cnt == a.cnt)
- return id < a.id;
- return cnt < a.cnt;
- }
- return x > a.x;
- }
- };
- int solve()
- {
- int n, m;
- scanf("%d %d", &n, &m);
- vector<pii> pc(n);
- set<Socket> q;
- for (int i = 0; i < n; ++i)
- scanf("%d", &pc[i].X), pc[i].Y = i;
- for (int i = 0; i < m; ++i)
- {
- int x;
- scanf("%d", &x);
- q.insert(Socket(x, i));
- }
- vector<int> sans(m), pans(n);
- sort(all(pc));
- reverse(all(pc));
- int cntc = 0, cntu = 0;
- for (int l = 0; l < n;)
- {
- if (q.empty())
- break;
- //printf("%d %d %d\n", l, pc[l].X, q.begin()->x);
- while (l < n && pc[l].X > q.begin()->x)
- ++l;
- if (l == n)
- break;
- if (q.begin()->x > pc[l].X)
- {
- Socket nx = *q.begin();
- q.erase(nx);
- nx.cnt++;
- nx.x = (nx.x + 1) / 2;
- q.insert(nx);
- }
- else
- {
- Socket nx = *q.begin();
- q.erase(nx);
- cntu += nx.cnt;
- ++cntc;
- sans[nx.id] = nx.cnt;
- pans[pc[l].Y] = nx.id + 1;
- ++l;
- }
- }
- printf("%d %d\n", cntc, cntu);
- for (int x : sans)
- printf("%d ", x);
- puts("");
- for (int x : pans)
- printf("%d ", x);
- puts("");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement