QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#400225#6671. Zadataknvujica0 186ms158320kbC++142.6kb2024-04-27 05:40:312024-04-27 05:40:31

Judging History

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

  • [2024-04-27 05:40:31]
  • 评测
  • 测评结果:0
  • 用时:186ms
  • 内存:158320kb
  • [2024-04-27 05:40:31]
  • 提交

answer

#include <bits/stdc++.h>

#define ll long long
#define fi first
#define se second

using namespace std;

const int maxn = 2e5 + 10, off = 1 << 20, maxcnt = 1e7;

int n, cnt;
set <int> s[maxn];
int tour[maxcnt];
int prop[maxcnt];
int l[maxcnt];
int r[maxcnt];
int root[maxn];
vector <int> v;

void push(int x, int lo, int hi){
	if(x >= off || prop[x] == 0) return;
	
	int mid = (lo + hi) / 2;
	
	prop[x] = 0;
	tour[l[x]] = (mid - 1)*(mid - 1) - max(0, lo - 1)*(lo - 1) - tour[l[x]];
	tour[r[x]] = (hi - 1)*(hi - 1) - (mid - 1)*(mid - 1) - tour[r[x]];
	prop[l[x]] ^= 1;
	prop[r[x]] ^= 1;
}

void update(int x, int lo, int hi, int rig){
//	cout << x << ' ' << lo << ' ' << hi << ' ' << rig << ' ' << tour[x] << endl;
	
	if(l[x] == 0){
		cnt++;
		l[x] = cnt;
		cnt++;
		r[x] = cnt;
	}
	
	push(x, lo, hi);
	
	if(lo >= rig) return;
	
	if(hi <= rig){
		tour[x] = (hi - 1)*(hi - 1) - max(0, lo - 1)*(lo - 1) - tour[x];
		prop[x] ^= 1;
		return;
	}
	
	int mid = (lo + hi) / 2;
	update(l[x], lo, mid, rig);
	update(r[x], mid, hi, rig);
	
	tour[x] = tour[l[x]] + tour[r[x]];
}

int query(int x, int lo, int hi, int lef, int rig){
	if(l[x] == 0){
		cnt++;
		l[x] = cnt;
		cnt++;
		r[x] = cnt;
	}
	
	push(x, lo, hi);
	
	if(hi <= lef || lo >= rig) return 0;
	
	if(lef <= lo && hi <= rig) return tour[x];
	
	int mid = (lo + hi) / 2;
	return query(l[x], lo, mid, lef, rig) + query(r[x], mid, hi, lef, rig);
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n;
	
	for(int i = 1; i <= n; i++){
		int a;
		cin >> a;
		a /= 2;
		
		cnt++;
		root[i] = cnt;
		s[i].insert(a);
		update(root[i], 0, off, a + 1);
	}
	
	for(int i = 1; i <= n - 1; i++){
		int a, b;
		cin >> a >> b;
		
		if(s[b].size() > s[a].size()) swap(a, b);
		
		v.clear();
		v.push_back(0);
		auto it = s[b].begin();
		while(it != s[b].end()){
			v.push_back(*it);
			it++;
		}
		s[b].clear();
		
		int ans = 0;
		
//		cout << a << ' ' << b << endl;
		
		for(int j = v.size() - 1; j >= 1; j -= 2){
			
			int q = query(root[a], 0, off, v[j - 1], v[j] + 1); 
//			cout << n + i << ' ' << v[j - 1] << ' ' << v[j] << ' ' << q << endl;
			
			ans += q;
		}
		
//		cout << tour[1] << endl;
		
		for(int j = 0; j < v.size(); j++){
			if(s[a].find(v[j]) == s[a].end()) s[a].insert(v[j]);
			else s[a].erase(v[j]);
			update(root[a], 0, off, v[j] + 1);
//			cout << v[j] << ' ' << "tour[1]: " << tour[1] << endl;
		}
		
		root[n + i] = root[a];
		swap(s[n + i], s[a]);
		   
		cout << ans * 4 << "\n";
	}
	
//	cout << root[7] << endl;
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 24ms
memory: 34008kb

input:

5000
217378 945562 533764 323494 69148 240722 205370 463122 552700 31800 616898 678076 893816 258468 34822 905360 967562 731346 340940 584418 684926 785402 107584 995542 363278 255302 196912 870994 329464 338390 154870 977540 65120 130388 350020 239660 553428 710306 385138 633274 841672 740778 17929...

output:

-904441628
1345510672
1554470704
2121404816
2088865188
0
758739556
-1176205276
0
-949920572
1969285636
-773125744
-1972165632
1781322816
198073344
0
942723908
-1849176576
-1646157952
313663760
0
-1665810780
515148476
-44881340
-494798732
-1782173968
1016824392
847329944
-1925738396
233833472
-430143...

result:

wrong answer 1st lines differ - expected: '359872811236', found: '-904441628'

Subtask #2:

score: 0
Wrong Answer

Test #27:

score: 0
Wrong Answer
time: 186ms
memory: 158320kb

input:

100000
590812 862538 815196 397712 773198 172122 270600 609324 841858 4868 597128 216378 982576 385590 842010 55844 671758 885088 577804 194248 229770 859754 274744 678176 607974 791062 607192 210234 863164 619708 804538 430978 237704 10512 840374 843732 875326 255462 970338 898540 925508 661464 413...

output:

1166468368
-1170138376
-1572860
430659084
-524284
-438788188
-1662903656
132011464
0
157565604
-445724776
-97799544
189392564
1450135192
6936588
-575029480
1113721060
1465425732
1804300940
1334517928
694887764
289788548
41948772
-756811840
1751607232
-756811840
-1569032624
-1848774552
583554752
-653...

result:

wrong answer 1st lines differ - expected: '349058819344', found: '1166468368'

Subtask #3:

score: 0
Runtime Error

Test #40:

score: 0
Runtime Error

input:

65536
131908 883754 813278 197778 704074 981802 297078 903698 485360 496064 726120 251990 462786 129558 704500 920556 903884 454552 949354 328526 921462 975888 780002 276668 675308 49774 83014 136308 679916 42174 151084 358830 284218 259680 65684 526980 516764 200170 265060 294150 128046 658864 2984...

output:

219851280
-524284
1798958436
-1938975132
-648871680
-524284
-262140
-1895956336
-1572860
-1048572
-1311307164
-1048572
0
-1698610396
0
1351538576
-786428
19420560
-786428
1537326864
-784091068
-1107584540
-1572860
0
-33172732
1071513604
870007808
-1048572
758272036
-1380264732
-1572860
-524284
-1347...

result:


Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%