QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#612550#9440. Train Seatsucup-team5177#WA 2ms18224kbC++143.7kb2024-10-05 11:54:172024-10-05 11:54:17

Judging History

This is the latest submission verdict.

  • [2024-10-05 11:54:17]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 18224kb
  • [2024-10-05 11:54:17]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll n, m, mx, s, ans, t, sl, sr;
ll a[200100];
ll p[200100];
ll trl[800100];
ll trr[800100];
ll lz1[800100];
ll lz2[800100];
ll t1, t2;
ll que1[200100];
ll que2[200100];

inline bool ok1(ll x, ll y, ll z) {
	return (a[z] - a[x]) * (y - x) < (a[y] - a[x]) * (z - x);
}

inline bool ok2(ll x, ll y, ll z) {
	return (a[x] - a[z]) * (x - y) < (a[x] - a[y]) * (x - z);
}

void work() {
	t1 = 1;
	que1[t1] = sl;
	for (ll i = sl + 1; i < sr; i++) {
		while (t1 > 1 && ok1(que1[t1 - 1], que1[t1], i)) {
			t1--;
		}
		que1[++t1] = i;
	}
	que1[t1 + 1] = 0;
	t2 = 1;
	que2[t2] = sr;
	for (ll i = sr - 1; i > sl; i--) {
		while (t2 > 1 && ok2(que2[t2 - 1], que2[t2], i)) {
			t2--;
		}
		que2[++t2] = i;
	}
	que2[t2 + 1] = 0;
	return;
}

void build(ll l, ll r, ll idx) {
	lz1[idx] = lz2[idx] = 0; 
	if (l == r) {
		trl[idx] = 0;
		trr[idx] = m + 1;
	} else {
		ll mid = (l + r) >> 1;
		build(l, mid, idx << 1);
		build(mid + 1, r, idx << 1 | 1);
	}
	return;
}

inline void pd(ll idx) {
	if (lz1[idx]) {
		trl[idx << 1] = lz1[idx << 1] = lz1[idx];
		trl[idx << 1 | 1] = lz1[idx << 1 | 1] = lz1[idx];
		lz1[idx] = 0;
	}
	if (lz2[idx]) {
		trr[idx << 1] = lz2[idx << 1] = lz2[idx];
		trr[idx << 1 | 1] = lz2[idx << 1 | 1] = lz2[idx];
		lz2[idx] = 0;
	}
	return;
}

void upd1(ll l, ll r, ll idx, ll L, ll R, ll x) {
	if (L <= l && r <= R) {
		trl[idx] = x;
		lz1[idx] = x;
	} else {
		pd(idx);
		ll mid = (l + r) >> 1;
		if (L <= mid) {
			upd1(l, mid, idx << 1, L, R, x);
		}
		if (mid < R) {
			upd1(mid + 1, r, idx << 1 | 1, L, R, x);
		}
	}
	return;
}

void upd2(ll l, ll r, ll idx, ll L, ll R, ll x) {
	if (L <= l && r <= R) {
		trr[idx] = x;
		lz2[idx] = x;
	} else {
		pd(idx);
		ll mid = (l + r) >> 1;
		if (L <= mid) {
			upd2(l, mid, idx << 1, L, R, x);
		}
		if (mid < R) {
			upd2(mid + 1, r, idx << 1 | 1, L, R, x);
		}
	}
	return;
}

inline ll qry(ll l, ll r, ll idx, ll x) {
	if (l == r) {
		return trr[idx] - trl[idx];
	} else {
		pd(idx);
		ll mid = (l + r) >> 1;
		if (x <= mid) {
			return qry(l, mid, idx << 1, x);
		} else {
			return qry(mid + 1, r, idx << 1 | 1, x);
		}
	}
}

int main() {
	scanf("%lld%lld", &n, &m);
	a[0] = 0;
	a[n + 1] = m + 1;
	for (ll i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
	}
	sort(a + 1, a + n + 1);
	sl = 0;
	sr = n + 1;
	work();
	t1 = t2 = 2;
	while (sl < sr - 1) {
		if (que1[t1] >= sr || que2[t2] <= sl || !que1[t1] || !que2[t2]) {
			work();
			t1 = t2 = 2;
			continue;
		}
		ll o1 = que1[t1];
		ll o2 = que2[t2];
		if ((a[o1] - a[sl]) * (sr - o2) < (a[sr] - a[o2]) * (o1 - sl)) {
			for (ll i = sl + 1; i <= o1; i++) {
				p[++t] = i;
			}
			sl = o1;
			t1++;
		} else {
			for (ll i = sr - 1; i >= o2; i--) {
				p[++t] = i;
			}
			sr = o2;
			t2++;
		}
	}
	build(1, n, 1);
	for (ll i = 1; i <= n; i++) {
		ans += qry(1, n, 1, p[i]);
		upd2(1, n, 1, 1, p[i], a[p[i]]);
		upd1(1, n, 1, p[i], n, a[p[i]]);
	} 
	mx = max(mx, ans);
	ans = 0;
	for (ll i = 1; i <= sl; i++) {
		p[i] = i;
	}
	for (ll i = n; i >= sr; i--) {
		p[n - i + sl + 1] = i;
	}
	build(1, n, 1);
	for (ll i = 1; i <= n; i++) {
		ans += qry(1, n, 1, p[i]);
		upd2(1, n, 1, 1, p[i], a[p[i]]);
		upd1(1, n, 1, p[i], n, a[p[i]]);
	} 
	mx = max(mx, ans);
	ans = 0;
	for (ll i = n; i >= sr; i--) {
		p[n - i + 1] = i;
	}
	for (ll i = 1; i <= sl; i++) {
		p[n - sr + 1 + i] = i;
	}
	build(1, n, 1);
	for (ll i = 1; i <= n; i++) {
		ans += qry(1, n, 1, p[i]);
		upd2(1, n, 1, 1, p[i], a[p[i]]);
		upd1(1, n, 1, p[i], n, a[p[i]]);
	} 
	mx = max(mx, ans); 
	printf("%lld\n", mx);
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 16056kb

input:

3 10
3 7 10

output:

28

result:

ok "28"

Test #2:

score: 0
Accepted
time: 2ms
memory: 16244kb

input:

5 20
3 10 11 14 17

output:

73

result:

ok "73"

Test #3:

score: 0
Accepted
time: 0ms
memory: 18148kb

input:

10 1000000000
136909656 243332691 643531997 505919307 43553384 657638276 57213246 179732866 357373203 182482400

output:

7649951260

result:

ok "7649951260"

Test #4:

score: 0
Accepted
time: 2ms
memory: 16176kb

input:

1 172024959
118390965

output:

172024960

result:

ok "172024960"

Test #5:

score: 0
Accepted
time: 2ms
memory: 14036kb

input:

2 920065252
24963998 580538879

output:

1815166508

result:

ok "1815166508"

Test #6:

score: 0
Accepted
time: 0ms
memory: 18224kb

input:

3 172078788
90217996 89200357 170380183

output:

432676968

result:

ok "432676968"

Test #7:

score: 0
Accepted
time: 2ms
memory: 18208kb

input:

4 440425711
125318960 91140311 293637977 102491554

output:

1442752023

result:

ok "1442752023"

Test #8:

score: 0
Accepted
time: 2ms
memory: 14004kb

input:

5 322827483
22471802 47973794 3707067 27640905 273307033

output:

1512343852

result:

ok "1512343852"

Test #9:

score: 0
Accepted
time: 2ms
memory: 14036kb

input:

72 630313504
112329946 338670434 45608233 444381955 513206139 543955969 420916952 485920423 598657953 568525637 92887514 375155749 230002387 302266710 539300386 433464422 380969627 445990156 239073197 278937451 50602251 494375406 139348725 11780176 601670777 68418714 591190755 96719555 612628609 778...

output:

25015466409

result:

ok "25015466409"

Test #10:

score: -100
Wrong Answer
time: 0ms
memory: 16184kb

input:

329 622872382
466743684 193969647 525632934 606824701 316078927 438757174 233370039 439667269 218116839 576709355 236207004 276080894 134588177 219271021 277834775 122503124 362333426 562156413 239350876 305538683 46542992 134113566 544875762 187990348 238185200 108286882 14195584 72219185 201093220...

output:

112656268708

result:

wrong answer 1st words differ - expected: '112658144244', found: '112656268708'