Submission #61178676
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define INF LONG_LONG_MAX
struct segtreemin {
int n;
vector<int> tree;
segtreemin(int size) : n(size), tree(4 * size, INF) {}
void build(const vector<int>& a, int v, int tl, int tr) {
if (tl == tr) {
tree[v] = a[tl];
} else {
int tm = (tl + tr) / 2;
build(a, 2 * v + 1, tl, tm);
build(a, 2 * v + 2, tm + 1, tr);
tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
}
}
int query(int v, int tl, int tr, int l, int r) {
if (l > r) return INF;
if (l == tl && r == tr) return tree[v];
int tm = (tl + tr) / 2;
return min(query(2 * v + 1, tl, tm, l, min(r, tm)),
query(2 * v + 2, tm + 1, tr, max(l, tm + 1), r));
}
void update(int v, int tl, int tr, int pos, int new_val) {
if (tl == tr) {
tree[v] = new_val;
} else {
int tm = (tl + tr) / 2;
if (pos <= tm) update(2 * v + 1, tl, tm, pos, new_val);
else update(2 * v + 2, tm + 1, tr, pos, new_val);
tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
}
}
void build(const vector<int>& a) {
build(a, 0, 0, n - 1);
}
int query(int l, int r) {
return query(0, 0, n - 1, l, r);
}
void update(int pos, int new_val) {
update(0, 0, n - 1, pos, new_val);
}
};
struct segtree {
int n;
vector<int> tree;
segtree(int size) : n(size), tree(4 * size) {}
void build(const vector<int>& a, int v, int tl, int tr) {
if (tl == tr) {
tree[v] = a[tl];
} else {
int tm = (tl + tr) / 2;
build(a, 2 * v + 1, tl, tm);
build(a, 2 * v + 2, tm + 1, tr);
tree[v] = max(tree[2 * v + 1], tree[2 * v + 2]);
}
}
int query(int v, int tl, int tr, int l, int r) {
if (l > r) return 0;
if (l == tl && r == tr) return tree[v];
int tm = (tl + tr) / 2;
return max(query(2 * v + 1, tl, tm, l, min(r, tm)),
query(2 * v + 2, tm + 1, tr, max(l, tm + 1), r));
}
void update(int v, int tl, int tr, int pos, int new_val) {
if (tl == tr) {
tree[v] = new_val;
} else {
int tm = (tl + tr) / 2;
if (pos <= tm) update(2 * v + 1, tl, tm, pos, new_val);
else update(2 * v + 2, tm + 1, tr, pos, new_val);
tree[v] = max(tree[2 * v + 1], tree[2 * v + 2]);
}
}
void build(const vector<int>& a) {
build(a, 0, 0, n - 1);
}
int query(int l, int r) {
return query(0, 0, n - 1, l, r);
}
void update(int pos, int new_val) {
update(0, 0, n - 1, pos, new_val);
}
};
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
cin >> n >> m;
set<int> a, b;
vector<tuple<int, int, char>> v;
while (m--) {
int x, y;
char c;
cin >> x >> y >> c;
a.insert(x);
b.insert(y);
v.emplace_back(x, y, c);
}
vector<int> A, B;
for (int i : a) A.emplace_back(i);
for (int i : b) B.emplace_back(i);
segtreemin ox(A.size()), oy(B.size());
segtree qx(A.size()), qy(B.size());
for (auto [x, y, c] : v) {
int l = lower_bound(all(A), x) - A.begin(), r = lower_bound(all(B), y) - B.begin();
if (c == 'W') {
if (qx.query(l, A.size() - 1) > y || qy.query(r, B.size() - 1) > x) return cout << "No", 0;
int Y = ox.query(l, l), X = oy.query(r, r);
if (Y > y) ox.update(l, y);
if (X > x) oy.update(r, x);
}
else {
if (ox.query(0, l) < y || oy.query(0, r) < x) return cout << "No", 0;
int Y = qx.query(l, l), X = qy.query(r, r);
if (Y < y) qx.update(l, y);
if (X < x) qy.update(r, x);
}
}
cout << "Yes";
return 0;
}
Submission Info
| Submission Time |
|
| Task |
D - Diagonal Separation |
| User |
JahonaliX |
| Language |
C++ 17 (gcc 12.2) |
| Score |
425 |
| Code Size |
4246 Byte |
| Status |
AC |
| Exec Time |
684 ms |
| Memory |
56740 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
425 / 425 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt, 01_test_52.txt, 01_test_53.txt, 01_test_54.txt, 01_test_55.txt, 01_test_56.txt, 01_test_57.txt, 01_test_58.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
1 ms |
3648 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3516 KiB |
| 00_sample_02.txt |
AC |
1 ms |
3420 KiB |
| 00_sample_03.txt |
AC |
1 ms |
3512 KiB |
| 01_test_00.txt |
AC |
1 ms |
3636 KiB |
| 01_test_01.txt |
AC |
1 ms |
3520 KiB |
| 01_test_02.txt |
AC |
1 ms |
3772 KiB |
| 01_test_03.txt |
AC |
1 ms |
3588 KiB |
| 01_test_04.txt |
AC |
146 ms |
9600 KiB |
| 01_test_05.txt |
AC |
131 ms |
9584 KiB |
| 01_test_06.txt |
AC |
110 ms |
9684 KiB |
| 01_test_07.txt |
AC |
42 ms |
5052 KiB |
| 01_test_08.txt |
AC |
59 ms |
6392 KiB |
| 01_test_09.txt |
AC |
59 ms |
6412 KiB |
| 01_test_10.txt |
AC |
360 ms |
56564 KiB |
| 01_test_11.txt |
AC |
193 ms |
37812 KiB |
| 01_test_12.txt |
AC |
331 ms |
56612 KiB |
| 01_test_13.txt |
AC |
81 ms |
20300 KiB |
| 01_test_14.txt |
AC |
591 ms |
56680 KiB |
| 01_test_15.txt |
AC |
487 ms |
50396 KiB |
| 01_test_16.txt |
AC |
578 ms |
56636 KiB |
| 01_test_17.txt |
AC |
289 ms |
33328 KiB |
| 01_test_18.txt |
AC |
339 ms |
56636 KiB |
| 01_test_19.txt |
AC |
63 ms |
13536 KiB |
| 01_test_20.txt |
AC |
506 ms |
56740 KiB |
| 01_test_21.txt |
AC |
203 ms |
25920 KiB |
| 01_test_22.txt |
AC |
665 ms |
56632 KiB |
| 01_test_23.txt |
AC |
82 ms |
14256 KiB |
| 01_test_24.txt |
AC |
684 ms |
56504 KiB |
| 01_test_25.txt |
AC |
110 ms |
17068 KiB |
| 01_test_26.txt |
AC |
437 ms |
56684 KiB |
| 01_test_27.txt |
AC |
400 ms |
47308 KiB |
| 01_test_28.txt |
AC |
656 ms |
56636 KiB |
| 01_test_29.txt |
AC |
161 ms |
29280 KiB |
| 01_test_30.txt |
AC |
600 ms |
56688 KiB |
| 01_test_31.txt |
AC |
271 ms |
31840 KiB |
| 01_test_32.txt |
AC |
619 ms |
56492 KiB |
| 01_test_33.txt |
AC |
236 ms |
30736 KiB |
| 01_test_34.txt |
AC |
364 ms |
28952 KiB |
| 01_test_35.txt |
AC |
273 ms |
23876 KiB |
| 01_test_36.txt |
AC |
390 ms |
28940 KiB |
| 01_test_37.txt |
AC |
59 ms |
8780 KiB |
| 01_test_38.txt |
AC |
277 ms |
28940 KiB |
| 01_test_39.txt |
AC |
198 ms |
19084 KiB |
| 01_test_40.txt |
AC |
369 ms |
28864 KiB |
| 01_test_41.txt |
AC |
79 ms |
11108 KiB |
| 01_test_42.txt |
AC |
358 ms |
29032 KiB |
| 01_test_43.txt |
AC |
46 ms |
7744 KiB |
| 01_test_44.txt |
AC |
362 ms |
29116 KiB |
| 01_test_45.txt |
AC |
135 ms |
14932 KiB |
| 01_test_46.txt |
AC |
500 ms |
56568 KiB |
| 01_test_47.txt |
AC |
99 ms |
18484 KiB |
| 01_test_48.txt |
AC |
469 ms |
56544 KiB |
| 01_test_49.txt |
AC |
204 ms |
43732 KiB |
| 01_test_50.txt |
AC |
474 ms |
56564 KiB |
| 01_test_51.txt |
AC |
204 ms |
37776 KiB |
| 01_test_52.txt |
AC |
360 ms |
56628 KiB |
| 01_test_53.txt |
AC |
324 ms |
49804 KiB |
| 01_test_54.txt |
AC |
381 ms |
29112 KiB |
| 01_test_55.txt |
AC |
20 ms |
5728 KiB |
| 01_test_56.txt |
AC |
318 ms |
28948 KiB |
| 01_test_57.txt |
AC |
47 ms |
7748 KiB |
| 01_test_58.txt |
AC |
1 ms |
3500 KiB |