QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#438211 | #6755. 方格染色 | Max_s_xaM | 100 ✓ | 64ms | 24844kb | C++14 | 8.3kb | 2024-06-10 13:53:40 | 2024-06-10 13:53:41 |
Judging History
answer
#include <iostream>
#include <algorithm>
#include <vector>
typedef long long ll;
typedef double lf;
// #define DEBUG 1
struct IO
{
#define MAXSIZE (1 << 20)
#define isdigit(x) (x >= '0' && x <= '9')
char buf[MAXSIZE], *p1, *p2;
char pbuf[MAXSIZE], *pp;
#if DEBUG
#else
IO() : p1(buf), p2(buf), pp(pbuf) {}
~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
#endif
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
#define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')
template <typename T>
void Read(T &x)
{
#if DEBUG
std::cin >> x;
#else
bool sign = 0; char ch = gc(); x = 0;
for (; !isdigit(ch); ch = gc())
if (ch == '-') sign = 1;
for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
if (sign) x = -x;
#endif
}
void Read(char *s)
{
#if DEBUG
std::cin >> s;
#else
char ch = gc();
for (; blank(ch); ch = gc());
for (; !blank(ch); ch = gc()) *s++ = ch;
*s = 0;
#endif
}
void Read(char &c) {for (c = gc(); blank(c); c = gc());}
void Push(const char &c)
{
#if DEBUG
putchar(c);
#else
if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
*pp++ = c;
#endif
}
template <typename T>
void Write(T x)
{
if (x < 0) x = -x, Push('-');
static T sta[35];
int top = 0;
do sta[top++] = x % 10, x /= 10; while (x);
while (top) Push(sta[--top] ^ 48);
}
template <typename T>
void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)
using namespace std;
const int MAXQ = 1e5 + 10, MAXN = 2e5 + 10, INF = 2e9;
int N, M, q;
ll sumA, sumB, sumC, sumAB, sumAC, sumBC, sumABC;
struct Opt
{
int t, l, r;
bool operator < (const Opt u) const {return t == u.t ? r < u.r : t < u.t;}
}rw[MAXQ], cl[MAXQ], dg[10];
int rwt, clt, dgt;
int tx[MAXN], ty[MAXN], n, m;
pair <int, int> st[MAXN];
int top;
vector <pair <int, int>> a[MAXN], b[MAXN];
struct Qry
{
int t, x, f;
bool operator < (const Qry u) const {return t < u.t;}
}qt[MAXN];
int tot;
int tr[MAXN << 2];
inline void Pushup(int cur) {tr[cur] = tr[cur << 1] + tr[cur << 1 | 1];}
void Update(int cur, int l, int r, int x, int k)
{
if (x < l || x > r) return;
if (l == r) tr[cur] += k;
else
{
int mid = l + r >> 1;
if (x <= mid) Update(cur << 1, l, mid, x, k);
else Update(cur << 1 | 1, mid + 1, r, x, k);
Pushup(cur);
}
}
int Query(int cur, int l, int r, int x, int y)
{
if (x <= l && r <= y) return tr[cur];
int mid = l + r >> 1, res = 0;
if (x <= mid) res += Query(cur << 1, l, mid, x, y);
if (y > mid) res += Query(cur << 1 | 1, mid + 1, r, x, y);
return res;
}
int ux[MAXN], uy[MAXN], xx, yy;
int main()
{
// freopen("ex_color/ex_color7.in", "r", stdin);
#if DEBUG
#else
ios::sync_with_stdio(0), cin.tie(0);
#endif
int CASE; Read(CASE);
Read(N), Read(M), Read(q);
for (int i = 1, op, x1, y1, x2, y2; i <= q; i++)
{
Read(op), Read(x1), Read(y1), Read(x2), Read(y2);
if (op == 1) rw[++rwt] = Opt{y1, min(x1, x2), max(x1, x2)};
else if (op == 2) cl[++clt] = Opt{x1, min(y1, y2), max(y1, y2)};
else dg[++dgt] = Opt{y1 - x1, x1, x2};
tx[++n] = x1, tx[++n] = x2, ty[++m] = y1, ty[++m] = y2;
}
sort(tx + 1, tx + n + 1), n = unique(tx + 1, tx + n + 1) - tx - 1;
sort(ty + 1, ty + m + 1), m = unique(ty + 1, ty + m + 1) - ty - 1;
sort(rw + 1, rw + rwt + 1), sort(cl + 1, cl + clt + 1), sort(dg + 1, dg + dgt + 1);
for (int i = 1; i <= rwt; i++)
{
rw[i].t = lower_bound(ty + 1, ty + m + 1, rw[i].t) - ty;
rw[i].l = lower_bound(tx + 1, tx + n + 1, rw[i].l) - tx;
rw[i].r = lower_bound(tx + 1, tx + n + 1, rw[i].r) - tx;
}
for (int i = 1; i <= clt; i++)
{
cl[i].t = lower_bound(tx + 1, tx + n + 1, cl[i].t) - tx;
cl[i].l = lower_bound(ty + 1, ty + m + 1, cl[i].l) - ty;
cl[i].r = lower_bound(ty + 1, ty + m + 1, cl[i].r) - ty;
}
for (int i = 1; i <= dgt; i++)
{
dg[i].l = lower_bound(tx + 1, tx + n + 1, dg[i].l) - tx;
dg[i].r = lower_bound(tx + 1, tx + n + 1, dg[i].r) - tx;
}
for (int l = 1, r; l <= rwt; l = r + 1)
{
r = l;
while (r < rwt && rw[r + 1].t == rw[l].t) r++;
top = 0;
for (int i = l, cur; i <= r; i++)
{
cur = rw[i].l;
while (top && st[top].second >= cur) cur = min(cur, st[top].first), top--;
st[++top] = make_pair(cur, rw[i].r);
}
for (int i = 1; i <= top; i++) a[rw[l].t].push_back(st[i]), sumA += tx[st[i].second] - tx[st[i].first] + 1;
// cout << rw[l].t << ":\n";
// for (int i = 1; i <= top; i++) cout << st[i].first << ' ' << st[i].second << '\n';
for (int i = 1; i <= top; i++)
{
if (st[i].first > 1) qt[++tot] = Qry{st[i].first - 1, rw[l].t, -1};
qt[++tot] = Qry{st[i].second, rw[l].t, 1};
}
}
for (int l = 1, r; l <= clt; l = r + 1)
{
r = l;
while (r < clt && cl[r + 1].t == cl[l].t) r++;
top = 0;
for (int i = l, cur; i <= r; i++)
{
cur = cl[i].l;
while (top && st[top].second >= cur) cur = min(cur, st[top].first), top--;
st[++top] = make_pair(cur, cl[i].r);
}
for (int i = 1; i <= top; i++) b[cl[l].t].push_back(st[i]), sumB += ty[st[i].second] - ty[st[i].first] + 1;
}
int _dgt = dgt; dgt = 0;
for (int l = 1, r; l <= _dgt; l = r + 1)
{
r = l;
while (r < _dgt && dg[r + 1].t == dg[l].t) r++;
top = 0;
for (int i = l, cur; i <= r; i++)
{
cur = dg[i].l;
while (top && st[top].second >= cur) cur = min(cur, st[top].first), top--;
st[++top] = make_pair(cur, dg[i].r);
}
int T = dg[l].t;
for (int i = 1; i <= top; i++) dg[++dgt] = Opt{T, st[i].first, st[i].second}, sumC += tx[st[i].second] - tx[st[i].first] + 1;
// cout << T << ":\n";
// for (int i = 1; i <= top; i++) cout << tx[st[i].first] << ' ' << tx[st[i].second] << "\n";
}
sort(qt + 1, qt + tot + 1);
for (int i = 1, j = 1; i <= n && j <= tot; i++)
{
for (auto x : b[i]) Update(1, 1, m, x.first, 1), Update(1, 1, m, x.second + 1, -1);
while (j <= tot && qt[j].t == i) sumAB += Query(1, 1, m, 1, qt[j].x) * qt[j].f, j++;
}
for (int i = 1; i <= dgt; i++)
{
xx = yy = 0;
for (int j = dg[i].l; j <= dg[i].r; j++)
{
int cur = lower_bound(ty + 1, ty + m + 1, dg[i].t + tx[j]) - ty;
int pos = upper_bound(b[j].begin(), b[j].end(), make_pair(cur, INF)) - b[j].begin() - 1;
bool flag = 0;
for (int k = max(0, pos - 2); k <= pos; k++)
if (ty[b[j][k].first] <= dg[i].t + tx[j] && dg[i].t + tx[j] <= ty[b[j][k].second]) {flag = 1; break;}
if (flag) sumBC++, uy[++yy] = tx[j] - tx[dg[i].l];
}
int bg = lower_bound(ty + 1, ty + m + 1, dg[i].t + tx[dg[i].l]) - ty, ed = lower_bound(ty + 1, ty + m + 1, dg[i].t + tx[dg[i].r]) - ty;
for (int j = bg; j <= ed; j++)
{
int cur = lower_bound(tx + 1, tx + n + 1, ty[j] - dg[i].t) - tx;
int pos = upper_bound(a[j].begin(), a[j].end(), make_pair(cur, INF)) - a[j].begin() - 1;
bool flag = 0;
for (int k = max(0, pos - 2); k <= pos; k++)
if (tx[a[j][k].first] <= ty[j] - dg[i].t && ty[j] - dg[i].t <= tx[a[j][k].second]) {flag = 1; break;}
if (flag) sumAC++, ux[++xx] = ty[j] - ty[bg];
}
for (int j = 1, k = 0; j <= xx; j++)
{
while (k < yy && uy[k + 1] <= ux[j]) k++;
if (k && uy[k] == ux[j]) sumABC++;
}
}
// cout << sumA << ' ' << sumB << ' ' << sumC << '\n';
cout << sumA + sumB + sumC - sumAB - sumBC - sumAC + sumABC << '\n';
return 0;
}
詳細信息
Test #1:
score: 5
Accepted
time: 0ms
memory: 20140kb
input:
1 300 300 300 2 3 211 3 214 2 55 69 55 110 2 41 231 41 243 2 205 220 205 250 2 157 229 157 252 1 176 78 183 78 2 3 94 3 106 1 9 35 9 35 2 47 290 47 297 1 278 93 288 93 2 41 236 41 236 1 194 60 252 60 2 193 188 193 212 2 3 223 3 230 1 79 13 109 13 1 44 34 180 34 2 195 219 195 227 1 118 26 157 26 1 6 ...
output:
6278
result:
ok 1 number(s): "6278"
Test #2:
score: 5
Accepted
time: 0ms
memory: 18032kb
input:
2 300 300 300 2 85 246 85 256 2 65 278 65 296 2 162 161 162 163 2 55 17 55 25 2 100 33 100 35 1 15 190 43 190 2 85 166 85 173 1 39 15 48 15 2 252 1 252 5 1 244 88 250 88 2 162 212 162 213 1 17 187 32 187 2 17 23 17 23 2 85 104 85 113 1 21 297 84 297 1 42 21 77 21 2 202 31 202 56 1 216 211 267 211 1 ...
output:
6200
result:
ok 1 number(s): "6200"
Test #3:
score: 5
Accepted
time: 0ms
memory: 17960kb
input:
3 300 300 300 2 116 224 116 238 2 46 87 46 92 2 28 22 28 31 2 283 56 283 131 2 39 242 39 272 1 231 61 264 61 2 116 69 116 86 1 225 60 281 60 2 189 39 189 160 1 24 298 56 298 2 28 159 28 167 1 246 160 285 160 2 177 93 177 120 2 116 168 116 168 1 281 290 283 290 1 277 136 277 136 2 289 268 289 282 1 1...
output:
6639
result:
ok 1 number(s): "6639"
Test #4:
score: 5
Accepted
time: 0ms
memory: 15988kb
input:
4 300 300 300 2 106 122 106 127 2 11 115 11 136 2 73 109 73 139 2 172 52 172 123 2 265 205 265 242 1 120 292 120 292 2 106 97 106 104 1 60 279 133 279 2 233 51 233 65 1 21 198 24 198 2 73 273 73 281 1 64 159 85 159 2 50 54 50 197 2 106 160 106 168 1 248 54 252 54 1 53 59 61 59 2 131 80 131 80 1 55 2...
output:
7078
result:
ok 1 number(s): "7078"
Test #5:
score: 5
Accepted
time: 2ms
memory: 18024kb
input:
5 300 300 300 2 287 265 287 265 2 111 270 111 297 2 157 17 157 58 2 277 275 277 298 2 15 211 15 211 1 14 30 63 30 2 287 84 287 156 1 253 35 295 35 2 20 190 20 194 1 286 33 286 33 2 157 96 157 98 1 91 39 163 39 2 250 8 250 155 2 287 11 287 11 1 300 251 300 251 1 2 17 25 17 2 277 265 277 298 1 29 220 ...
output:
7125
result:
ok 1 number(s): "7125"
Test #6:
score: 5
Accepted
time: 0ms
memory: 18100kb
input:
6 100000 100000 2000 1 18077 90844 29870 90844 1 15898 25209 29023 25209 2 44675 61077 44675 61413 1 99173 18081 99624 18081 2 14413 11091 14413 11125 1 99340 26474 99814 26474 2 96947 75112 96947 80888 2 66129 52517 66129 54954 1 93237 26027 98206 26027 2 78129 62643 78129 85005 1 58541 25209 58885...
output:
9811536
result:
ok 1 number(s): "9811536"
Test #7:
score: 5
Accepted
time: 3ms
memory: 20208kb
input:
7 100000 100000 2000 1 34031 33382 34054 33382 1 99015 33804 99864 33804 2 34512 3505 34512 4898 1 55048 84217 56238 84217 2 38112 40398 38112 42615 1 50442 65899 51889 65899 2 88157 62617 88157 86041 2 60447 86164 60447 92917 1 65226 27267 76959 27267 2 14212 5626 14212 15791 1 8592 33804 10140 338...
output:
10053021
result:
ok 1 number(s): "10053021"
Test #8:
score: 5
Accepted
time: 3ms
memory: 18104kb
input:
8 100000 100000 2000 1 98275 10296 99977 10296 1 73858 63081 78509 63081 2 13466 55377 13466 56714 1 6243 488 9927 488 2 17152 2176 17152 2450 1 54764 65968 58926 65968 2 44370 73685 44370 75926 2 67096 21518 67096 39914 1 451 9553 481 9553 2 68472 48718 68472 62445 1 4999 63081 8847 63081 2 19270 4...
output:
10332321
result:
ok 1 number(s): "10332321"
Test #9:
score: 5
Accepted
time: 3ms
memory: 18076kb
input:
9 100000 100000 2000 1 23317 23871 31852 23871 1 53872 67865 56553 67865 2 72463 7396 72463 8278 1 1541 6200 3500 6200 2 70353 66810 70353 67517 1 13712 70706 14713 70706 2 61832 48509 61832 67304 2 15946 75070 15946 88595 1 12825 45666 19060 45666 2 69012 9660 69012 11970 1 69321 67865 69955 67865 ...
output:
9979747
result:
ok 1 number(s): "9979747"
Test #10:
score: 5
Accepted
time: 53ms
memory: 22864kb
input:
10 100000 100000 100000 1 61835 40902 62028 40902 1 64668 87940 90795 87940 1 61451 55355 61721 55355 1 98743 90394 98811 90394 1 93456 95437 93715 95437 1 178 96457 37434 96457 1 93457 73049 93641 73049 1 19855 25199 20057 25199 1 30835 55620 49371 55620 1 870 22188 35965 22188 1 89651 53076 93078 ...
output:
376451109
result:
ok 1 number(s): "376451109"
Test #11:
score: 5
Accepted
time: 48ms
memory: 21000kb
input:
11 100000 100000 100000 1 93433 32681 94198 32681 1 2415 85702 10653 85702 1 8749 5532 8752 5532 1 4176 3468 7801 3468 1 65135 97514 70898 97514 1 1346 69975 2218 69975 1 7238 53922 7339 53922 1 6680 21587 14606 21587 1 9177 40049 75470 40049 1 2212 26058 49400 26058 1 35015 27905 44587 27905 1 6151...
output:
378527694
result:
ok 1 number(s): "378527694"
Test #12:
score: 5
Accepted
time: 48ms
memory: 18916kb
input:
12 100000 100000 100000 1 644 10293 1177 10293 1 21231 74542 39652 74542 1 43086 28517 43600 28517 1 26256 93913 30489 93913 1 96516 44567 99105 44567 1 61061 42889 82165 42889 1 99983 5181 99987 5181 1 34354 47611 35329 47611 1 9509 65384 12488 65384 1 4173 11791 41138 11791 1 56669 47644 65359 476...
output:
374249547
result:
ok 1 number(s): "374249547"
Test #13:
score: 5
Accepted
time: 52ms
memory: 18860kb
input:
13 100000 100000 100000 1 25010 45828 33332 45828 1 51296 68890 72169 68890 1 78689 23687 78701 23687 1 95867 9382 97806 9382 1 55509 23786 99806 23786 1 40260 60931 44183 60931 1 22221 30731 22226 30731 1 76059 58981 76830 58981 1 7920 60112 15752 60112 1 44688 44084 73628 44084 1 11777 79268 17075...
output:
383211528
result:
ok 1 number(s): "383211528"
Test #14:
score: 5
Accepted
time: 57ms
memory: 22284kb
input:
14 100000 100000 100000 2 80885 49245 80885 49283 2 11220 64102 11220 65000 1 92473 13377 99579 13377 2 80885 86626 80885 86820 2 21118 1259 21118 11985 2 42237 62778 42237 69888 1 97222 79184 98758 79184 2 44599 63597 44599 63713 2 79040 95387 79040 96667 2 69913 88035 69913 88669 2 45307 2924 4530...
output:
381101960
result:
ok 1 number(s): "381101960"
Test #15:
score: 5
Accepted
time: 50ms
memory: 23152kb
input:
15 100000 100000 100000 2 91764 54353 91764 54520 2 28652 49170 28652 49615 1 9331 16798 11503 16798 2 91764 79993 91764 81072 2 84153 26433 84153 32088 2 75533 55981 75533 56009 1 37815 31743 39093 31743 2 6745 3757 6745 3760 2 63642 6258 63642 22771 2 55482 37341 55482 37878 2 81074 74483 81074 88...
output:
382632220
result:
ok 1 number(s): "382632220"
Test #16:
score: 5
Accepted
time: 50ms
memory: 24844kb
input:
16 100000 100000 100000 2 66828 6630 66828 7506 2 62880 34446 62880 43261 1 47672 55311 60293 55311 2 66828 76715 66828 76935 2 363 3447 363 68149 2 63886 41674 63886 55533 1 22133 90250 22411 90250 2 73144 82613 73144 82629 2 29932 19382 29932 22540 2 1995 82720 1995 83239 2 45497 7470 45497 10822 ...
output:
380367856
result:
ok 1 number(s): "380367856"
Test #17:
score: 5
Accepted
time: 54ms
memory: 22316kb
input:
17 100000 100000 100000 2 77793 41255 77793 41333 2 5747 28352 5747 35492 1 14185 60840 15523 60840 2 77793 13667 77793 13709 2 29577 61040 29577 86816 2 65419 21908 65419 21909 1 4053 40767 5023 40767 2 5799 75974 5799 75989 2 56279 2793 56279 5116 2 88847 42645 88847 42947 2 26816 5454 26816 29322...
output:
377356031
result:
ok 1 number(s): "377356031"
Test #18:
score: 5
Accepted
time: 59ms
memory: 19808kb
input:
18 100000 100000 100000 2 1268 88808 1268 88885 2 57502 2110 57502 4367 1 41290 26515 47069 26515 2 1268 26818 1268 27021 2 71149 83597 71149 94531 2 10874 27348 10874 27667 1 43190 25771 43495 25771 2 58647 88335 58647 88418 2 79069 10314 79069 79144 2 40298 5896 40298 6940 2 59012 9576 59012 13924...
output:
381702497
result:
ok 1 number(s): "381702497"
Test #19:
score: 5
Accepted
time: 57ms
memory: 20200kb
input:
19 100000 100000 100000 2 89823 49443 89823 49983 2 80228 97306 80228 97895 1 42598 57336 42786 57336 2 89823 77556 89823 77717 2 66932 24494 66932 55405 2 53340 64541 53340 64712 1 60745 97405 69512 97405 2 40429 2913 40429 3039 2 81959 82182 81959 90993 2 8781 67985 8781 68397 2 78315 7314 78315 3...
output:
380715962
result:
ok 1 number(s): "380715962"
Test #20:
score: 5
Accepted
time: 64ms
memory: 22772kb
input:
20 1000000000 1000000000 100000 2 94971842 653040809 94971842 653703458 2 482724716 383575122 482724716 435099343 1 318102608 972959400 378877390 972959400 2 94971842 860758970 94971842 863268182 2 367852389 787409469 367852389 998707870 2 419520406 173007646 419520406 446320624 1 89956469 295257477...
output:
3930560445242
result:
ok 1 number(s): "3930560445242"
Extra Test:
score: 0
Extra Test Passed