QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#400997#6671. Zadataknvujica0 411ms365864kbC++142.6kb2024-04-27 20:39:432024-04-27 20:39:44

Judging History

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

  • [2024-04-27 20:39:44]
  • 评测
  • 测评结果:0
  • 用时:411ms
  • 内存:365864kb
  • [2024-04-27 20:39:43]
  • 提交

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 = 2e7;

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

void push(int x, int lo, int hi){
	if(hi - lo == 1 || prop[x] == 0) return;
	
	int mid = (lo + hi) / 2;
	
	prop[x] = 0;
	tour[l[x]] = pravi[mid] - pravi[lo] - tour[l[x]];
	tour[r[x]] = pravi[hi] - pravi[mid] - 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] = pravi[hi] - pravi[lo] - 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]];
}

ll 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++){
		cin >> arr[i];
		arr[i] /= 2;
		saz.push_back(arr[i]);
	}
	
	saz.push_back(0);
	sort(saz.begin(), saz.end());
	saz.erase(unique(saz.begin(), saz.end()), saz.end());

	for(int i = 1; i <= n; i++){
		int poz = lower_bound(saz.begin(), saz.end(), arr[i]) - saz.begin();
		pravi[poz] = (ll)arr[i]*arr[i];
		arr[i] = poz;
		cnt++;
		root[i] = cnt;
		s[i].insert(arr[i]);
		update(root[i], 0, off, arr[i]);
	}
	
	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();
		
		ll ans = 0;
				
		for(int j = v.size() - 1; j >= 1; j -= 2){			
			ans += query(root[a], 0, off, v[j - 1], v[j]);
		}
		
		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]);
		}
		
		root[n + i] = root[a];
		swap(s[n + i], s[a]);
		   
		cout << ans * 4 << "\n";
	}
		
	return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 18ms
memory: 26336kb

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:

359872811236
632705703184
113223620400
251229507984
1338757520016
0
142492660324
492745033764
383562216976
89244392644
551725099524
278399748496
311560446976
233709556800
1159383957604
0
172741415748
92640103936
28418613120
60443205904
42771203344
341931572900
73529592508
193225675856
248612109488
3...

result:

wrong answer 5th lines differ - expected: '470237900880', found: '1338757520016'

Subtask #2:

score: 0
Wrong Answer

Test #27:

score: 0
Wrong Answer
time: 196ms
memory: 180756kb

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:

349058819344
315485699072
25981509888
617774289056
29625982884
43598377116
-157903604140
799919125092
23697424
-172641190156
17217153424
658258339660
92672441524
49048226836
23697424
596038451604
-38405355592
271426226484
26531127972
17175971548
662419105796
19435877084
46405026940
403210431324
4673...

result:

wrong answer 3rd lines differ - expected: '158174834944', found: '25981509888'

Subtask #3:

score: 0
Wrong Answer

Test #40:

score: 0
Wrong Answer
time: 411ms
memory: 365864kb

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:

17399720464
39116137284
495720197476
88255338084
235574329600
63498960100
16785275364
496320250000
206617520704
107929332676
849092217444
76545182224
2477451076
6891324196
1778646276
22826375056
67433702400
4314387856
40068028900
70256803600
16395778116
89086728676
242284466176
8531108496
4721146752...

result:

wrong answer 26th lines differ - expected: '319159463364', found: '34867887264'

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%