CSES - NOI 2019 Open - Results
Submission details
Task:Thieves and Prisons
Sender:tmk
Submission time:2019-03-10 12:08:24 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED8
#2ACCEPTED13
#3ACCEPTED14
#4ACCEPTED18
#5ACCEPTED47
Test results
testverdicttimegroup
#1ACCEPTED0.03 s2, 4, 5details
#2ACCEPTED0.03 s2, 4, 5details
#3ACCEPTED0.03 s2, 4, 5details
#4ACCEPTED0.03 s2, 4, 5details
#5ACCEPTED0.02 s2, 4, 5details
#6ACCEPTED0.04 s4, 5details
#7ACCEPTED0.03 s4, 5details
#8ACCEPTED0.02 s4, 5details
#9ACCEPTED0.03 s1, 3, 4, 5details
#10ACCEPTED0.03 s1, 3, 4, 5details
#11ACCEPTED0.03 s1, 3, 4, 5details
#12ACCEPTED0.03 s1, 3, 4, 5details
#13ACCEPTED0.02 s1, 3, 4, 5details
#14ACCEPTED0.03 s1, 3, 4, 5details
#15ACCEPTED0.03 s1, 3, 4, 5details
#16ACCEPTED0.02 s1, 3, 4, 5details
#17ACCEPTED0.03 s1, 2, 3, 4, 5details
#18ACCEPTED0.03 s1, 3, 4, 5details
#19ACCEPTED0.12 s2, 5details
#20ACCEPTED0.12 s2, 5details
#21ACCEPTED0.12 s2, 5details
#22ACCEPTED0.11 s5details
#23ACCEPTED0.08 s5details
#24ACCEPTED0.03 s3, 4, 5details
#25ACCEPTED0.03 s3, 4, 5details
#26ACCEPTED0.02 s3, 4, 5details
#27ACCEPTED0.03 s3, 4, 5details
#28ACCEPTED0.03 s4, 5details
#29ACCEPTED0.04 s4, 5details
#30ACCEPTED0.03 s4, 5details
#31ACCEPTED0.03 s4, 5details
#32ACCEPTED0.04 s2, 4, 5details
#33ACCEPTED0.03 s2, 4, 5details
#34ACCEPTED0.03 s2, 4, 5details
#35ACCEPTED0.03 s2, 4, 5details
#36ACCEPTED0.09 s3, 5details
#37ACCEPTED0.09 s3, 5details
#38ACCEPTED0.09 s3, 5details
#39ACCEPTED0.10 s3, 5details
#40ACCEPTED0.10 s5details
#41ACCEPTED0.11 s5details
#42ACCEPTED0.11 s5details
#43ACCEPTED0.12 s5details
#44ACCEPTED0.12 s2, 5details
#45ACCEPTED0.13 s2, 5details
#46ACCEPTED0.14 s2, 5details
#47ACCEPTED0.13 s2, 5details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:75:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(bal[i] > Q.size() or in_prison[ev[i].nd]) nope();
       ~~~~~~~^~~~~~~~~~
input/code.cpp:76:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    while(bal[i] <= Q.size()) {
          ~~~~~~~^~~~~~~~~~~

Code

#include<bits/stdc++.h>
using namespace std;
#ifndef d
#define d(...)
#endif
#define st first
#define nd second
#define pb push_back
#define siz(c) (int)(c).size()
#define all(c) (c).begin(), (c).end()
typedef long long LL;
typedef long double LD;
constexpr int INF=1e9+7;
constexpr LL INFL=1e18;
template<class L, class R> ostream &operator<<(ostream &os, pair<L,R> P) {
  return os << "(" << P.st << "," << P.nd << ")";
}
/*
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T>
using ordered_set =
    tree<T, null_type, less<T>, rb_tree_tag,
         tree_order_statistics_node_update>;
*/

constexpr int maxn = 100005;

int n, k, m, bal[maxn];
vector<pair<bool, int>> ev;
vector<int> pos[maxn];
int pt[maxn];

vector<int> escaped[maxn];
bool in_prison[maxn];

set<int> prison[maxn];
int where[maxn];

int ans[maxn];

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> k >> m;
	for(int i=0; i<m; i++) {
		char c; int x;
		cin >> c >> x;
		ev.emplace_back(c == 'O', x);
		pos[x].push_back(i);
	}
	
	int cur = 0;
	for(int i=m-1; i>=0; i--) {
		cur += (ev[i].st ? 1 : -1);
		cur = max(cur, 0);
		bal[i] = cur;
	}
	
	for(int i=1; i<=n; i++)
		pos[i].push_back(m);
	
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Q;
	
	auto nope = []() {
		cout << "IMPOSSIBLE\n";
		exit(0);
	};
	
	for(int i=0; i<m; i++) {
		if(ev[i].st) {
			if(bal[i] > Q.size() or in_prison[ev[i].nd]) nope();
			while(bal[i] <= Q.size()) {
				assert(not Q.empty());
				auto p = Q.top(); Q.pop();
				if(p.st <= i) nope();
				escaped[i].push_back(p.nd);
				in_prison[p.nd] = false;
			}
			pt[ev[i].nd]++;
		} else {
			if(in_prison[ev[i].nd]) nope();
			in_prison[ev[i].nd] = true;
			Q.emplace(pos[ev[i].nd][++pt[ev[i].nd]], ev[i].nd);
		}
	}
	
	while(not Q.empty()) {
		auto p = Q.top(); Q.pop();
		escaped[m].push_back(p.nd);
	}
	
	set<int> av;
	for(int i=1; i<=k; i++) av.emplace(i);
	for(int i=m; i>=0; i--) {
		if(not escaped[i].empty()) {
			if(av.empty()) nope();
			auto j = *av.begin();
			av.erase(av.begin());
			for(auto x:escaped[i]) 
				prison[where[x] = j].insert(x);
			ans[i] = j;
		} else if(i < m) {
			int t = ev[i].nd;
			prison[where[t]].erase(t);
			if(prison[where[t]].empty())
				av.insert(where[t]);
			ans[i] = where[t];
		}
	}
	
	for(int i=0; i<m; i++)
		cout << ans[i] << " ";
	cout << "\n";
}

Test details

Test 1

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 1
C 1

correct output

user output

Test 2

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
C 1
C 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
O 1
C 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
C 2

correct output
1 1 

user output
1 1 

Test 7

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 8

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
O 2

correct output
1 1 

user output
1 1 

Test 9

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
C 1
...

correct output
1 1 1 1 1 

user output
1 1 1 1 1 

Test 10

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
O 3
...

correct output
2 1 2 1 1 

user output
2 1 2 1 1 

Test 11

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
O 1
...

correct output
2 1 2 1 1 

user output
2 1 2 1 1 

Test 12

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 1
O 3
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 13

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 4
C 1
O 2
C 1
O 3

correct output
1 1 1 1 

user output
1 1 1 1 

Test 14

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 4
C 1
O 2
C 2
O 1

correct output
1 1 1 1 

user output
1 1 1 1 

Test 15

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 3
C 1
C 2
C 3

correct output
1 1 1 

user output
1 1 1 

Test 16

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 3
O 1
C 2
C 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 17

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
2 2 7
C 1
O 2
O 2
O 2
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 18

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
4 2 5
C 2
O 3
C 1
O 4
...

correct output
1 1 1 1 1 

user output
1 1 1 1 1 

Test 19

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
50000 49999 49998 49997 49996 ...

user output
50000 49999 49998 49997 49996 ...

Test 20

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 21

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
20000 20000 20000 20000 20000 ...

user output
20000 20000 20000 20000 20000 ...

Test 22

Group: 5

Verdict: ACCEPTED

input
100000 100 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
100 100 100 100 100 100 100 10...

Test 23

Group: 5

Verdict: ACCEPTED

input
100000 99 100000
C 1
C 2
C 3
C 4
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 24

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 25

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

Test 26

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 ...

Test 27

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 28

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 29

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 ...

Test 30

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 3 2 3 3 2 2 2 5 4 2 ...

user output
1 1 1 1 4 1 2 1 1 2 2 2 5 3 2 ...

Test 31

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 32

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 33

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 ...

Test 34

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 2 1 3 3 3 2 2 2 2 4 5 ...

user output
1 1 1 1 1 3 2 2 2 1 1 1 1 4 5 ...

Test 35

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 36

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 37

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 ...

Test 38

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 ...

Test 39

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 40

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 41

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 3 1 2 ...

Test 42

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 3 2 3 3 3 3 3 3 4 5 ...

user output
1 1 1 1 2 1 3 1 1 1 1 1 1 4 5 ...

Test 43

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 44

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 45

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 3 2 1 ...

Test 46

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 2 1 3 3 3 3 3 3 4 5 3 ...

user output
1 1 1 1 3 2 1 1 1 1 1 1 4 5 1 ...

Test 47

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...