답안 #1067123

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1067123 2024-08-20T11:44:32 Z AdamGS 송신탑 (IOI22_towers) C++17
40 / 100
1254 ms 32972 KB
#include "towers.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const ll INF=1e18+7;
const int LIM=1e5+7;
ll T[LIM], jaki[LIM], n;
vector<int>trma[4*LIM];
ll trmi[4*LIM], N=1;
set<pair<ll,ll>>S, P;
vector<pair<ll,ll>>V;
void dodaj(int x) {
	auto it=S.lower_bound({x, -1}); ++it;
	auto a=*it;
	P.insert({abs(T[x]-T[a.st]), x});
}
void usun(int x) {
	auto it=S.lower_bound({x, -1}); ++it;
	auto a=*it;
	P.erase({abs(T[x]-T[a.st]), x});
}
int ile(int v, int x) {
	if(trma[v].size()==0) return 0;
	if(trma[v].back()<=x) return 0;
	int po=0, ko=trma[v].size()-1;
	while(po<ko) {
		int sr=(po+ko)/2;
		if(trma[v][sr]<=x) po=sr+1; else ko=sr;
	}
	return trma[v].size()-po;
}
int licz(int l, int r, int x) {
	l+=N; r+=N;
	int ans=ile(l, x);
	if(l!=r) ans+=ile(r, x);
	while(l/2!=r/2) {
		if(l%2==0) ans+=ile(l+1, x);
		if(r%2==1) ans+=ile(r-1, x);
		l/=2; r/=2;
	}
	return ans;
}
int cntma(int l, int r) {
	l+=N; r+=N;
	int ans=max(trma[l].back(), trma[r].back());
	while(l/2!=r/2) {
		if(l%2==0) ans=max(ans, trma[l+1].back());
		if(r%2==1) ans=max(ans, trma[r-1].back());
		l/=2; r/=2;
	}
	return ans;
}
int cntmi(int l, int r) {
	l+=N; r+=N;
	ll ans=min(trmi[l], trmi[r]);
	while(l/2!=r/2) {
		if(l%2==0) ans=min(ans, trmi[l+1]);
		if(r%2==1) ans=min(ans, trmi[r-1]);
		l/=2; r/=2;
	}
	return ans;
}
int znajdzp(int l, int r, int x) {
	int po=l, ko=r;
	while(po<ko) {
		int sr=(po+ko)/2;
		if(cntma(l, sr)<=x) po=sr+1; else ko=sr;
	}
	return po;
}
int znajdzs(int l, int r, int x) {
	int po=l, ko=r;
	while(po<ko) {
		int sr=(po+ko+1)/2;
		if(cntma(sr, r)<=x) ko=sr-1; else po=sr;
	}
	return po;
}
void init(int _n, vector<int>_H) {
	n=_n;
	while(N<n+2) N*=2;
	rep(i, 2*N) trmi[i]=-INF;
	rep(i, n) T[i+1]=_H[i];
	T[0]=T[n+1]=INF;
	int akt=2;
	jaki[0]=jaki[n+1]=1;
	rep(i, n) if((T[i]<T[i+1] && T[i+1]>T[i+2]) || (T[i]>T[i+1] && T[i+1]<T[i+2])) {
		jaki[i+1]=akt;
		akt^=3;
	}
	rep(i, n+2) if(jaki[i]) S.insert({i, jaki[i]});
	rep(i, n+2) if(!jaki[i]) trma[N+i].pb(0);
	auto it=S.begin();
	while(true) {
		auto it2=it; ++it2;
		if(it2==S.end()) break;
		auto a=*it;
		dodaj(a.st);
		++it;
	}
	V.pb({0, S.size()/2});
	while(P.size()>2) {
		auto a=*P.begin();
		usun(a.nd);
		trma[N+a.nd].pb(V.size());
		auto it=S.lower_bound({a.nd, -1});
		++it;
		auto b=*it;
		trma[N+b.st].pb(V.size());
		usun(b.st);
		--it; --it;
		b=*it;
		usun(b.st);
		++it;
		S.erase(it);
		it=S.lower_bound({a.nd, -1});
		S.erase(it);
		it=S.lower_bound({a.nd, -1});
		--it;
		b=*it;
		dodaj(b.st);
		V.pb({a.st, S.size()/2});
	}
	rep(i, n+2) if(trma[N+i].size()==0) trma[N+i].pb(V.size()+10);
	rep(i, n+2) trmi[N+i]=T[i];
	for(int i=N-1; i; --i) {
		trmi[i]=min(trmi[2*i], trmi[2*i+1]);
		for(auto j : trma[2*i]) trma[i].pb(j);
		for(auto j : trma[2*i+1]) trma[i].pb(j);
		sort(all(trma[i]));
	}
}
int max_towers(int l, int r, int d) {
	++l; ++r;
	int po=0, ko=V.size()-1;
	while(po<ko) {
		int sr=(po+ko+1)/2;
		if(V[sr].st<d) po=sr; else ko=sr-1;
	}
	int x=licz(l, r, po);
	if(x==0) return 1;
	int a=znajdzp(l, r, po), b=znajdzs(l, r, po);
	if(jaki[a]==2) ++x;
	x/=2;
	if(jaki[a]==1 && l<a) {
		if(cntmi(l, a-1)<=T[a]-d) ++x;
	}
	if(jaki[b]==1 && b<r) {
		if(cntmi(b+1, r)<=T[b]-d) ++x;
	}
	return x;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 368 ms 19544 KB 18th lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 10584 KB Output is correct
2 Correct 5 ms 10840 KB Output is correct
3 Correct 5 ms 10840 KB Output is correct
4 Correct 6 ms 10924 KB Output is correct
5 Correct 6 ms 11096 KB Output is correct
6 Correct 6 ms 11096 KB Output is correct
7 Correct 6 ms 11096 KB Output is correct
8 Correct 4 ms 10996 KB Output is correct
9 Correct 4 ms 10840 KB Output is correct
10 Correct 5 ms 10840 KB Output is correct
11 Correct 5 ms 10840 KB Output is correct
12 Correct 4 ms 10584 KB Output is correct
13 Correct 4 ms 10868 KB Output is correct
14 Correct 5 ms 10840 KB Output is correct
15 Correct 5 ms 10912 KB Output is correct
16 Correct 6 ms 11096 KB Output is correct
17 Correct 6 ms 11096 KB Output is correct
18 Correct 4 ms 10796 KB Output is correct
19 Correct 4 ms 11012 KB Output is correct
20 Correct 6 ms 10840 KB Output is correct
21 Correct 6 ms 11096 KB Output is correct
22 Correct 7 ms 11096 KB Output is correct
23 Correct 5 ms 10840 KB Output is correct
24 Correct 4 ms 10984 KB Output is correct
25 Correct 5 ms 10840 KB Output is correct
26 Correct 5 ms 10944 KB Output is correct
27 Correct 5 ms 10840 KB Output is correct
28 Correct 6 ms 11096 KB Output is correct
29 Correct 7 ms 11096 KB Output is correct
30 Correct 7 ms 11096 KB Output is correct
31 Correct 6 ms 11096 KB Output is correct
32 Correct 4 ms 10840 KB Output is correct
33 Correct 4 ms 11000 KB Output is correct
34 Correct 5 ms 10840 KB Output is correct
35 Correct 5 ms 10840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 10584 KB Output is correct
2 Correct 5 ms 10840 KB Output is correct
3 Correct 5 ms 10840 KB Output is correct
4 Correct 6 ms 10924 KB Output is correct
5 Correct 6 ms 11096 KB Output is correct
6 Correct 6 ms 11096 KB Output is correct
7 Correct 6 ms 11096 KB Output is correct
8 Correct 4 ms 10996 KB Output is correct
9 Correct 4 ms 10840 KB Output is correct
10 Correct 5 ms 10840 KB Output is correct
11 Correct 5 ms 10840 KB Output is correct
12 Correct 4 ms 10584 KB Output is correct
13 Correct 4 ms 10868 KB Output is correct
14 Correct 5 ms 10840 KB Output is correct
15 Correct 5 ms 10912 KB Output is correct
16 Correct 6 ms 11096 KB Output is correct
17 Correct 6 ms 11096 KB Output is correct
18 Correct 4 ms 10796 KB Output is correct
19 Correct 4 ms 11012 KB Output is correct
20 Correct 6 ms 10840 KB Output is correct
21 Correct 6 ms 11096 KB Output is correct
22 Correct 7 ms 11096 KB Output is correct
23 Correct 5 ms 10840 KB Output is correct
24 Correct 4 ms 10984 KB Output is correct
25 Correct 5 ms 10840 KB Output is correct
26 Correct 5 ms 10944 KB Output is correct
27 Correct 5 ms 10840 KB Output is correct
28 Correct 6 ms 11096 KB Output is correct
29 Correct 7 ms 11096 KB Output is correct
30 Correct 7 ms 11096 KB Output is correct
31 Correct 6 ms 11096 KB Output is correct
32 Correct 4 ms 10840 KB Output is correct
33 Correct 4 ms 11000 KB Output is correct
34 Correct 5 ms 10840 KB Output is correct
35 Correct 5 ms 10840 KB Output is correct
36 Correct 102 ms 22592 KB Output is correct
37 Correct 178 ms 28356 KB Output is correct
38 Correct 161 ms 28316 KB Output is correct
39 Correct 241 ms 32968 KB Output is correct
40 Correct 245 ms 32968 KB Output is correct
41 Correct 230 ms 32968 KB Output is correct
42 Correct 236 ms 32960 KB Output is correct
43 Correct 40 ms 26376 KB Output is correct
44 Correct 39 ms 26368 KB Output is correct
45 Correct 39 ms 26364 KB Output is correct
46 Correct 38 ms 26316 KB Output is correct
47 Correct 156 ms 28336 KB Output is correct
48 Correct 238 ms 32968 KB Output is correct
49 Correct 234 ms 32972 KB Output is correct
50 Correct 37 ms 26324 KB Output is correct
51 Correct 38 ms 26316 KB Output is correct
52 Correct 162 ms 28324 KB Output is correct
53 Correct 254 ms 32968 KB Output is correct
54 Correct 243 ms 32896 KB Output is correct
55 Correct 47 ms 26316 KB Output is correct
56 Correct 48 ms 26316 KB Output is correct
57 Correct 154 ms 29172 KB Output is correct
58 Correct 162 ms 28336 KB Output is correct
59 Correct 158 ms 28356 KB Output is correct
60 Correct 244 ms 32968 KB Output is correct
61 Correct 238 ms 32964 KB Output is correct
62 Correct 230 ms 32968 KB Output is correct
63 Correct 237 ms 32964 KB Output is correct
64 Correct 37 ms 26316 KB Output is correct
65 Correct 44 ms 26316 KB Output is correct
66 Correct 40 ms 26324 KB Output is correct
67 Correct 46 ms 26544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 962 ms 28356 KB Output is correct
2 Correct 1171 ms 28356 KB Output is correct
3 Incorrect 1254 ms 28356 KB 18409th lines differ - on the 1st token, expected: '1', found: '0'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 256 ms 15260 KB Output is correct
2 Correct 1022 ms 28468 KB Output is correct
3 Correct 1008 ms 28484 KB Output is correct
4 Correct 1130 ms 32964 KB Output is correct
5 Correct 1169 ms 32828 KB Output is correct
6 Correct 1148 ms 32968 KB Output is correct
7 Correct 1134 ms 32968 KB Output is correct
8 Correct 788 ms 26316 KB Output is correct
9 Correct 773 ms 26316 KB Output is correct
10 Correct 784 ms 26312 KB Output is correct
11 Correct 792 ms 26528 KB Output is correct
12 Correct 157 ms 28396 KB Output is correct
13 Correct 237 ms 32968 KB Output is correct
14 Correct 231 ms 32972 KB Output is correct
15 Correct 37 ms 26316 KB Output is correct
16 Correct 37 ms 26432 KB Output is correct
17 Correct 158 ms 29136 KB Output is correct
18 Correct 154 ms 28528 KB Output is correct
19 Correct 152 ms 28400 KB Output is correct
20 Correct 228 ms 32856 KB Output is correct
21 Correct 238 ms 32812 KB Output is correct
22 Correct 226 ms 32968 KB Output is correct
23 Correct 242 ms 32968 KB Output is correct
24 Correct 37 ms 26324 KB Output is correct
25 Correct 37 ms 26520 KB Output is correct
26 Correct 37 ms 26324 KB Output is correct
27 Correct 39 ms 26360 KB Output is correct
28 Correct 5 ms 10840 KB Output is correct
29 Correct 7 ms 11096 KB Output is correct
30 Correct 7 ms 11108 KB Output is correct
31 Correct 6 ms 10840 KB Output is correct
32 Correct 4 ms 10968 KB Output is correct
33 Correct 5 ms 10840 KB Output is correct
34 Correct 7 ms 10840 KB Output is correct
35 Correct 6 ms 11008 KB Output is correct
36 Correct 6 ms 11096 KB Output is correct
37 Correct 7 ms 11096 KB Output is correct
38 Correct 6 ms 11096 KB Output is correct
39 Correct 7 ms 11096 KB Output is correct
40 Correct 4 ms 10840 KB Output is correct
41 Correct 4 ms 10840 KB Output is correct
42 Correct 4 ms 10840 KB Output is correct
43 Correct 4 ms 10840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 10584 KB Output is correct
2 Correct 5 ms 10840 KB Output is correct
3 Correct 5 ms 10840 KB Output is correct
4 Correct 6 ms 10924 KB Output is correct
5 Correct 6 ms 11096 KB Output is correct
6 Correct 6 ms 11096 KB Output is correct
7 Correct 6 ms 11096 KB Output is correct
8 Correct 4 ms 10996 KB Output is correct
9 Correct 4 ms 10840 KB Output is correct
10 Correct 5 ms 10840 KB Output is correct
11 Correct 5 ms 10840 KB Output is correct
12 Correct 4 ms 10584 KB Output is correct
13 Correct 4 ms 10868 KB Output is correct
14 Correct 5 ms 10840 KB Output is correct
15 Correct 5 ms 10912 KB Output is correct
16 Correct 6 ms 11096 KB Output is correct
17 Correct 6 ms 11096 KB Output is correct
18 Correct 4 ms 10796 KB Output is correct
19 Correct 4 ms 11012 KB Output is correct
20 Correct 6 ms 10840 KB Output is correct
21 Correct 6 ms 11096 KB Output is correct
22 Correct 7 ms 11096 KB Output is correct
23 Correct 5 ms 10840 KB Output is correct
24 Correct 4 ms 10984 KB Output is correct
25 Correct 5 ms 10840 KB Output is correct
26 Correct 5 ms 10944 KB Output is correct
27 Correct 5 ms 10840 KB Output is correct
28 Correct 6 ms 11096 KB Output is correct
29 Correct 7 ms 11096 KB Output is correct
30 Correct 7 ms 11096 KB Output is correct
31 Correct 6 ms 11096 KB Output is correct
32 Correct 4 ms 10840 KB Output is correct
33 Correct 4 ms 11000 KB Output is correct
34 Correct 5 ms 10840 KB Output is correct
35 Correct 5 ms 10840 KB Output is correct
36 Correct 102 ms 22592 KB Output is correct
37 Correct 178 ms 28356 KB Output is correct
38 Correct 161 ms 28316 KB Output is correct
39 Correct 241 ms 32968 KB Output is correct
40 Correct 245 ms 32968 KB Output is correct
41 Correct 230 ms 32968 KB Output is correct
42 Correct 236 ms 32960 KB Output is correct
43 Correct 40 ms 26376 KB Output is correct
44 Correct 39 ms 26368 KB Output is correct
45 Correct 39 ms 26364 KB Output is correct
46 Correct 38 ms 26316 KB Output is correct
47 Correct 156 ms 28336 KB Output is correct
48 Correct 238 ms 32968 KB Output is correct
49 Correct 234 ms 32972 KB Output is correct
50 Correct 37 ms 26324 KB Output is correct
51 Correct 38 ms 26316 KB Output is correct
52 Correct 162 ms 28324 KB Output is correct
53 Correct 254 ms 32968 KB Output is correct
54 Correct 243 ms 32896 KB Output is correct
55 Correct 47 ms 26316 KB Output is correct
56 Correct 48 ms 26316 KB Output is correct
57 Correct 154 ms 29172 KB Output is correct
58 Correct 162 ms 28336 KB Output is correct
59 Correct 158 ms 28356 KB Output is correct
60 Correct 244 ms 32968 KB Output is correct
61 Correct 238 ms 32964 KB Output is correct
62 Correct 230 ms 32968 KB Output is correct
63 Correct 237 ms 32964 KB Output is correct
64 Correct 37 ms 26316 KB Output is correct
65 Correct 44 ms 26316 KB Output is correct
66 Correct 40 ms 26324 KB Output is correct
67 Correct 46 ms 26544 KB Output is correct
68 Correct 962 ms 28356 KB Output is correct
69 Correct 1171 ms 28356 KB Output is correct
70 Incorrect 1254 ms 28356 KB 18409th lines differ - on the 1st token, expected: '1', found: '0'
71 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 368 ms 19544 KB 18th lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -