Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- #include <cstdio>
- #include <cmath>
- #include <vector>
- #include <algorithm>
- #include <map>
- #include <set>
- #include <queue>
- #include <string>
- using namespace std;
- const int MAXN = 20005;
- int tm[MAXN], cnt[MAXN];
- char s[MAXN];
- set<pair<int, int> > st;
- int last[MAXN];
- int pas[MAXN];
- int tp[MAXN];
- int sz = 0;
- int main() {
- freopen("a.in", "r", stdin);
- //freopen("a.out", "w", stdout);
- int k, n;
- scanf("%d%d", &k, &n);
- for (int i = 0; i < n; i++) {
- scanf("%d%d", &tm[i], &cnt[i]);
- }
- int crit = min(5, k / 5);
- while(true) {
- while(true) {
- int p;
- scanf("%d", &p);
- if (feof(stdin))
- return 0;
- if (p == -1)
- break;
- tp[sz] = p;
- last[sz] = cnt[p];
- st.insert({last[sz], sz});
- sz ++;
- }
- while(true) {
- int id, te;
- scanf("%d%d", &id, &te);
- if (feof(stdin))
- return 0;
- if (id < 0)
- break;
- k++;
- scanf("%s", s);
- if (s[0] == 'O') {
- pas[id] ++;
- } else {
- pas[id] = cnt[tp[id]];
- }
- if (pas[id] == cnt[tp[id]]) {
- if (last[id] > 0)
- st.erase({last[id], id});
- }
- }
- while(st.size() > 0 && k > crit) {
- pair<int, int> p = *st.begin();
- int id = p.second;
- st.erase({last[id], id});
- int rem = min(last[id], k);
- if (rem < last[id])
- rem = k - crit;
- for (int i = 0; i < rem; i++)
- printf("%d %d\n", id, last[id] - 1), last[id]--, k--;
- if (last[id] > 0)
- st.insert({last[id], id});
- }
- printf("-1 -1\n");
- fflush(stdout);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement