QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#55334#4861. Lexicographic Comparisonzhoukangyang#AC ✓136ms36528kbC++115.3kb2022-10-13 11:33:372022-10-13 11:33:39

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-13 11:33:39]
  • 评测
  • 测评结果:AC
  • 用时:136ms
  • 内存:36528kb
  • [2022-10-13 11:33:37]
  • 提交

answer

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector < int > 
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define ld __float128
using namespace std;
const int N = 5e5 + 7, M = 1e5 + 7;

int ch[N][2], fa[N], siz[N], mn[N], vs[N], tag[N], rev[N];

bool get(int x) {
	return ch[fa[x]][0] == x || ch[fa[x]][1] == x;
}
void upd(int x) {
	if(x) 
		siz[x] = 1 + siz[ch[x][0]] + siz[ch[x][1]], 
		mn[x] = min(x, min(mn[ch[x][0]], mn[ch[x][1]]));
}
void flip(int x) {
	if(x) rev[x] ^= 1, swap(ch[x][0], ch[x][1]);
}
void mark(int x, int y) {
	if(x) tag[x] = vs[x] = y;
}
void push(int x) {
	if(rev[x]) flip(ch[x][0]), flip(ch[x][1]), rev[x] = 0; 
	if(tag[x]) mark(ch[x][0], tag[x]), mark(ch[x][1], tag[x]), tag[x] = 0;
}
void rotate(int x) {
	int y = fa[x], z = fa[y], fson = ch[y][1] == x, ano = ch[x][fson ^ 1];
	if(get(y)) ch[z][ch[z][1] == y] = x;
	if(ano) fa[ano] = y;
	fa[x] = z, fa[y] = x, ch[x][fson ^ 1] = y, ch[y][fson] = ano, upd(y), upd(x);
}
int F[N], ftot, fx;
void splay(int x) {
	F[ftot = 1] = fx = x;
	while(get(fx)) F[++ftot] = fx = fa[fx];
	while(ftot) push(F[ftot--]);
	while(get(x)) {
		int y = fa[x], z = fa[y];
		if(get(y)) rotate(((ch[y][1] == x) ^ (ch[z][1] == y)) ? x : y);
		rotate(x);
	}
}

void access(int x) {
	for(int y = 0; x; y = x, x = fa[x]) 
		splay(x), ch[x][1] = y, upd(x);
}
void makeroot(int x) {
	access(x), splay(x), flip(x);
}
void split(int x, int y) {
	makeroot(x), access(y), splay(y);
}
int findroot(int x) {
	access(x), splay(x); 
	while(ch[x][0]) push(x), x = ch[x][0];
	return splay(x), x;
}
void link(int x, int y) {
//	cout << "link" << x << ' ' << y << endl;
	makeroot(x);
	if(findroot(y) != x) fa[x] = y;
	else cout << "/jy" << endl;
}
void cut(int x, int y) {
//	cout << "del " << x << ' ' << y << endl;
	makeroot(x);
	if(findroot(y) == x && ch[x][1] == y && !ch[y][0]) 
		fa[y] = ch[x][1] = 0, upd(x);
	else 
		cout << "JY" << endl;
}

int kth(int x, int k) {
	while(x) {
		push(x);
		if(k <= siz[ch[x][0]]) x = ch[x][0];
		else {
			k -= siz[ch[x][0]] + 1;
			if(!k) return x;
			x = ch[x][1];
		}
	}
	return -1;
}

int n, m, a[N], p[N], MP[N];

set < int > st[N];
map < int, int > mp;

void broke(int x) { // break x in the p's cyc. 
//	cout << "x = " << x << ' ' << MP[x] << endl;
	access(x), splay(x); 
	int vp = vs[x];
	if(vp == x) return ;
//	cout << "vp = " << vp << endl; 
//	cout << "equal " << x << ' ' << vp << ' ' << p[vp] << endl;
//		cout << "cut " << x << ' ' << p[x] << endl;
	cut(x, p[x]);
	link(vp, p[vp]);
	split(p[x], x), mark(x, x);
}
int V[N];

void insert(int x, int w) {
	V[x] = w;
//	cout << x << " :: " << w << endl;
	if(sz(st[w])) assert(mp.count(*st[w].begin())), mp.erase(*st[w].begin());
	st[w].insert(x), mp[*st[w].begin()] = w;
}
void del(int x) {
	st[V[x]].erase(x);
//	cout << "del " << x << endl;
	if(!mp.count(x)) return ;
	int u = mp[x];
	mp.erase(x);
	if(sz(st[u])) mp[*st[u].begin()] = u;
}

void Main() {
	cin >> n >> m, mn[0] = 1e9;
	L(i, 1, n) p[i] = i, MP[i] = i, a[i] = i;
	L(i, 0, n) st[i].clear();
	mp.clear();
	L(i, 1, n) 
		fa[i] = ch[i][0] = ch[i][1] = tag[i] = vs[i] = rev[i] = 0, 
		insert(i, 1), mark(i, i), upd(1);
	while(m--) {
		string op;
		ll x, y;
		cin >> op >> x >> y;
		if(op == "swap_p") {
			if(x == y) continue;
			if(findroot(x) == findroot(y)) {
				broke(x), split(p[x], x), del(mn[x]);
				cut(y, p[y]);
				swap(MP[p[x]], MP[p[y]]), swap(p[x], p[y]);
				split(p[x], x), mark(x, x), insert(mn[x], siz[x]);
				split(p[y], y), mark(y, y), insert(mn[y], siz[y]);
			} else {
				broke(x), broke(y);
				split(p[x], x), del(mn[x]);
				split(p[y], y), del(mn[y]);
				link(y, p[x]);
				swap(MP[p[x]], MP[p[y]]), swap(p[x], p[y]);
				split(p[x], x), mark(x, x), insert(mn[x], siz[x]);
			}
//			cout << "QAQ" << endl; 
		} else if(op == "swap_a") {
			swap(a[x], a[y]);
		} else {
			--x, --y;
//			mp.clear();
//			L(i, 1, n) {
//				if(findroot(i) != findroot(p[i])) {
//					link(i, p[i]);
//				} else {
//					makeroot(p[i]), access(i), splay(i), mark(i, i);
//					mp[mn[i]] = siz[i]; 
//				}
//			}
			
			ll d = abs(x - y);
			int mnp = 0, ds = 0;
			for(auto u : mp) {
//				cout << "sec = " << u.second << endl;
				if(d % u.second) {
					mnp = u.first;
					ds = u.second;
					break ;
				}
			} 
			if(!mnp) {
				cout << "=\n";
				continue;
			}
//			cout << mnp << " and " << ds << endl;
			int dx = x % ds, dy = y % ds;
//			cout << "SIZ = " << MP[mnp] << endl;
			broke(MP[mnp]), makeroot(mnp), access(MP[mnp]), splay(MP[mnp]); 
			int px = kth(MP[mnp], dx + 1), py = kth(MP[mnp], dy + 1);
//			cout << px << " and " << py << endl; 
			if(a[px] < a[py]) {
				cout << "<\n";
			} else {
				cout << ">\n";
			}
		}
//		L(i, 1, n) cout << p[i] << ' ';
//		cout << endl;
////		L(i, 1, n) cout << MP[i] << ' ';
////		cout << endl; 
//		L(i, 1, n) cout << findroot(i) << ' ';
//		cout << endl;
	}
} 

int main() {
//	freopen("data.in", "r", stdin);
	ios :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int t;
	cin >> t;
	while(t--) Main();
	return 0;
}
/*
1
3 4
swap_p 3 1
swap_p 2 1
cmp 1 3
swap_p 1 3
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 12ms
memory: 27164kb

input:

2
5 5
cmp 1 2
swap_p 1 2
cmp 1 2
swap_a 1 2
cmp 1 2
1 1
swap_a 1 1

output:

=
<
>

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 52ms
memory: 27152kb

input:

10000
5 3
swap_p 2 2
cmp 8 9
swap_a 4 2
19 1
swap_p 7 1
6 12
cmp 5 10
swap_p 3 4
cmp 3 4
swap_p 2 2
cmp 9 3
swap_p 5 2
swap_a 3 3
cmp 5 7
swap_a 1 2
cmp 7 2
swap_a 5 4
cmp 9 2
2 8
swap_p 2 1
swap_p 1 1
cmp 4 7
cmp 3 6
swap_p 2 1
swap_p 1 1
swap_a 2 2
cmp 7 1
70 6
cmp 9 5
swap_p 53 63
swap_p 53 31
sw...

output:

=
=
<
=
=
<
<
>
<
=
=
>
=
=
=
=
=
=
=
=
=
=
>
<
=
<
=
>
=
=
=
>
=
>
>
=
=
=
=
=
=
=
=
>
<
=
=
=
>
<
=
<
=
=
=
<
=
<
>
=
=
=
=
>
>
>
>
=
=
=
=
=
=
=
=
=
<
=
>
>
>
=
=
=
=
=
=
=
=
=
<
=
<
=
<
=
=
=
>
>
<
=
=
=
=
>
<
=
=
=
=
=
=
=
=
=
<
>
<
>
=
=
=
=
=
>
<
<
<
>
=
<
=
>
=
<
=
=
=
=
=
=
<
<
>
>
<
=
=
=
...

result:

ok 33282 lines

Test #3:

score: 0
Accepted
time: 64ms
memory: 27068kb

input:

10000
2 15
swap_a 2 2
swap_p 2 2
cmp 326694868363016462 925456129016738104
swap_p 1 2
swap_a 2 2
swap_p 2 1
swap_p 2 1
swap_a 2 2
cmp 194403870824900634 290296733170168261
cmp 685622533532390613 845098181059391203
swap_p 2 2
swap_p 2 2
swap_p 2 2
swap_p 1 1
swap_a 2 1
31 3
swap_a 5 30
swap_a 15 1
cm...

output:

=
>
=
=
=
=
<
=
=
<
<
<
>
=
>
=
>
=
=
=
=
=
<
<
>
<
=
=
<
<
<
>
=
=
=
=
=
=
=
<
=
=
=
<
=
>
=
=
=
=
<
=
=
=
=
=
=
>
<
=
=
=
=
=
=
=
<
=
<
=
<
=
>
>
=
=
=
=
=
=
=
<
<
>
>
=
=
=
<
=
=
=
<
>
<
=
=
=
=
>
>
=
>
=
=
=
=
>
=
=
>
<
<
=
=
=
=
=
<
=
=
=
>
>
>
>
=
>
=
=
>
=
=
=
=
=
=
=
=
=
<
<
>
<
>
=
=
>
=
<
...

result:

ok 33428 lines

Test #4:

score: 0
Accepted
time: 79ms
memory: 27232kb

input:

1000
65 43
swap_a 42 31
swap_a 56 25
cmp 13794376267158472 46277656098109759
cmp 444036536304978262 755847352552132493
cmp 908256097321476449 595621612325961509
cmp 635480759573261863 559355393434597718
swap_a 27 57
cmp 585086370256076627 733151313507052357
swap_a 43 62
swap_p 64 50
swap_p 40 16
swa...

output:

=
=
=
=
=
<
<
<
<
>
>
<
=
<
>
>
<
<
>
>
>
=
<
=
<
>
>
<
<
<
>
>
<
>
>
>
<
<
<
>
<
<
<
>
<
>
<
<
>
>
>
<
>
>
>
>
<
<
<
<
>
>
<
=
=
=
=
=
=
=
=
>
=
=
=
>
=
=
<
>
<
<
<
>
<
<
=
=
=
=
<
=
=
=
>
>
>
>
>
>
=
=
=
>
=
=
<
>
=
<
<
>
<
=
<
>
>
<
>
<
>
>
<
>
<
<
<
<
>
<
<
<
>
>
>
>
>
>
>
>
<
<
>
=
=
=
=
>
<
>
...

result:

ok 33319 lines

Test #5:

score: 0
Accepted
time: 93ms
memory: 27512kb

input:

100
879 867
swap_p 111 344
cmp 361083772874837023 709151040161323902
swap_a 99 180
cmp 641913877862669667 450742900066998679
cmp 39483451443775826 957145697637778063
swap_a 237 178
swap_a 31 326
swap_p 291 662
swap_a 84 703
swap_a 541 37
swap_a 57 615
swap_a 332 609
swap_p 74 439
swap_a 281 350
swap...

output:

<
=
>
<
=
>
=
<
>
=
=
<
=
=
>
<
=
=
=
>
>
>
<
<
>
<
=
>
<
>
>
>
>
>
<
>
>
<
<
<
<
<
<
>
=
<
<
>
>
<
>
<
>
>
<
>
<
<
>
>
>
=
<
=
>
<
<
=
<
<
<
>
<
>
>
<
>
>
<
>
<
<
>
>
<
>
>
>
>
<
>
>
<
<
<
<
>
<
>
<
<
<
<
<
>
>
>
>
>
>
>
>
<
>
<
<
<
>
>
<
<
>
>
>
>
>
>
<
<
>
>
>
<
>
<
<
>
<
>
>
>
<
<
<
>
>
<
>
>
<
...

result:

ok 33308 lines

Test #6:

score: 0
Accepted
time: 117ms
memory: 29940kb

input:

10
2397 3950
swap_a 643 401
cmp 515978739075589733 566064461406691441
swap_p 108 1740
cmp 645610656342389227 935405231824412954
swap_p 1949 972
swap_a 350 395
cmp 584097429036799031 466605450371139077
cmp 188110274758711055 52954946610635907
cmp 898925291698145288 529496510940857315
cmp 369035636621...

output:

=
<
=
=
>
=
>
<
<
<
>
=
<
>
=
=
<
<
<
<
=
<
>
<
<
<
>
>
<
<
<
<
=
>
<
>
<
>
>
<
>
<
>
<
<
<
=
>
<
>
=
<
>
<
<
<
=
>
>
>
>
>
<
>
>
<
<
<
=
<
<
<
>
>
<
>
=
<
<
<
<
=
=
=
>
<
>
<
=
<
>
>
>
=
>
<
<
<
=
>
=
>
>
>
<
>
>
=
<
>
>
<
>
=
<
>
=
>
>
<
>
>
=
<
>
>
<
<
=
>
>
<
>
>
<
>
>
>
<
=
>
<
<
<
=
<
>
<
<
>
...

result:

ok 33547 lines

Test #7:

score: 0
Accepted
time: 136ms
memory: 36528kb

input:

1
100000 100000
cmp 275296188064989117 800031045635430494
swap_p 387 71136
cmp 795078469543095339 86592103476177255
swap_p 49521 71789
swap_p 79546 16901
swap_a 92586 88319
cmp 165520908415920510 83593495696513240
cmp 397367134248646770 481876428149248833
swap_a 13927 77270
swap_a 47748 40395
cmp 23...

output:

=
=
=
>
=
>
=
>
=
<
<
=
=
=
=
=
>
=
=
<
=
<
>
=
=
=
<
=
=
>
=
=
<
=
=
<
<
=
<
<
=
<
>
>
=
=
=
=
<
=
=
=
<
>
=
<
<
>
<
=
<
>
<
>
=
=
<
<
=
=
=
=
=
=
<
=
>
>
<
=
=
=
=
=
>
<
>
<
<
<
>
=
=
<
=
=
<
>
<
>
>
<
=
<
<
>
>
>
<
>
<
=
>
=
>
<
<
>
<
=
>
<
<
<
<
>
>
>
<
<
<
>
<
>
>
>
=
>
<
=
<
<
>
>
<
>
>
>
>
>
...

result:

ok 33339 lines

Test #8:

score: 0
Accepted
time: 121ms
memory: 36372kb

input:

1
100000 100000
cmp 711525147933505257 539965757374435240
cmp 772631397936820308 681918367983678100
swap_p 32225 37695
cmp 908390687737274785 813678038049709833
cmp 937904202854552410 12308320153007147
swap_a 4841 25610
cmp 917660754232600606 924722230106760619
swap_a 43334 13111
swap_a 14653 89397
...

output:

=
=
=
>
>
=
=
=
=
>
=
=
<
=
=
>
=
<
<
>
<
=
>
>
>
=
=
<
=
<
=
<
=
>
=
<
=
>
<
<
=
>
=
>
<
=
=
<
=
=
>
>
>
=
=
>
>
>
=
=
=
<
<
=
=
>
=
>
=
<
<
>
=
=
=
=
>
=
<
<
<
=
>
=
>
=
=
=
=
=
>
<
=
=
>
<
<
=
=
>
=
=
=
<
<
>
=
<
<
>
>
=
<
>
<
<
<
<
>
<
<
<
>
<
>
<
>
<
>
=
<
<
>
<
<
<
>
=
>
>
<
>
=
<
>
<
>
>
=
<
...

result:

ok 33018 lines

Test #9:

score: 0
Accepted
time: 119ms
memory: 36440kb

input:

1
100000 100000
swap_a 47080 69562
cmp 762845072453568546 81871312173171816
swap_p 50683 36267
swap_a 1106 8448
swap_p 33023 74990
swap_p 20793 57647
swap_a 76519 58086
swap_p 4716 55099
swap_a 80469 59619
swap_a 90650 70560
cmp 349858792087292474 769398732484415241
swap_a 7191 80796
swap_a 73779 68...

output:

=
>
=
>
=
<
=
=
>
<
=
<
=
>
=
>
>
>
=
>
=
<
<
=
<
>
>
<
=
>
=
=
<
=
<
=
=
<
>
<
<
<
=
=
>
=
<
=
=
>
>
<
>
<
<
<
>
=
>
=
>
>
>
>
=
=
=
=
=
>
=
>
<
=
=
<
=
=
=
=
=
<
<
>
<
<
=
<
=
<
>
<
>
>
>
>
>
<
<
<
<
<
>
>
=
<
<
>
>
=
<
>
=
<
<
<
=
<
<
<
<
=
<
<
=
<
=
<
=
<
>
=
>
>
=
<
>
<
<
<
<
<
=
>
>
=
>
>
>
<
...

result:

ok 33392 lines

Test #10:

score: 0
Accepted
time: 136ms
memory: 36504kb

input:

1
100000 100000
cmp 583983059080602946 243207209117285947
cmp 943450775895518815 492498714512827142
cmp 496703023811323100 155542152882112147
swap_p 83477 5804
cmp 292296110154672437 213693414719502592
swap_a 65042 53869
cmp 791788720971316669 53728981001645229
swap_p 15063 80147
cmp 827461442511953...

output:

=
=
=
<
=
=
<
=
=
<
<
<
=
=
=
=
>
=
<
=
<
=
=
<
<
>
>
=
=
<
>
<
=
=
>
>
=
=
=
<
<
<
=
<
=
>
<
<
=
=
=
=
=
=
=
=
=
=
<
=
=
>
=
>
>
=
>
<
=
=
>
>
<
=
<
>
=
<
=
>
=
=
<
<
=
<
>
<
<
=
=
<
<
<
<
=
>
<
=
=
=
<
=
>
=
=
=
=
=
>
<
=
>
<
>
=
<
=
=
=
=
=
=
>
>
=
<
=
<
>
=
>
>
=
=
=
<
=
>
<
<
=
>
<
=
>
>
=
<
>
...

result:

ok 33481 lines

Test #11:

score: 0
Accepted
time: 127ms
memory: 36508kb

input:

1
100000 100000
swap_a 30227 43877
swap_p 46302 44772
swap_a 64941 79197
cmp 91013920853007211 964613016882996222
cmp 258377755420086237 61743627329152983
swap_a 91790 41931
cmp 297004985803970515 262531377925362079
cmp 560237748477773595 786407574131206764
swap_a 19973 42446
swap_a 63085 6414
swap_...

output:

<
=
=
<
<
>
<
<
=
=
=
=
<
>
>
=
<
<
<
=
=
=
=
=
=
=
<
=
=
<
<
<
<
>
=
=
>
>
<
=
>
>
<
<
>
=
=
=
=
>
>
>
=
=
=
<
<
<
=
=
=
=
=
>
=
>
<
<
=
=
=
>
=
>
>
<
=
>
=
=
>
=
>
=
=
>
=
>
=
<
=
>
=
<
=
=
=
>
>
=
>
=
=
=
=
<
=
=
<
>
<
=
=
>
=
<
=
=
<
=
<
=
=
=
>
=
>
>
<
=
>
=
>
>
<
<
>
=
=
>
<
<
>
=
<
<
<
=
<
>
...

result:

ok 33642 lines

Test #12:

score: 0
Accepted
time: 108ms
memory: 36508kb

input:

1
100000 100000
swap_a 88322 88321
swap_p 59728 59727
cmp 970709134002514987 378535920005436396
swap_a 16103 16104
swap_p 26234 26233
swap_a 7304 7303
cmp 199519809604421701 453382810567022576
swap_a 76013 76014
swap_a 51979 51980
swap_p 39573 39574
swap_a 92697 92698
cmp 731583826302382596 60589963...

output:

<
<
>
=
=
<
=
<
<
=
<
=
=
<
<
=
=
<
=
=
=
=
<
>
>
=
>
=
>
>
=
=
=
>
<
<
=
=
>
=
>
>
<
=
>
=
=
>
=
=
>
>
=
<
>
>
=
=
>
>
=
<
=
=
=
>
=
=
=
<
=
=
<
>
>
<
>
=
=
=
=
=
=
>
=
<
>
>
=
<
<
<
=
<
=
=
<
=
<
=
>
=
=
=
<
>
=
>
<
>
>
=
=
=
=
=
>
=
=
=
<
>
=
=
>
<
>
=
>
=
<
>
<
=
=
>
=
>
>
<
=
>
<
=
=
<
=
=
=
=
...

result:

ok 33547 lines