QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#167203#5374. 数圈LCX756100 ✓164ms15008kbC++143.1kb2023-09-07 12:20:162023-09-07 12:20:18

Judging History

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

  • [2023-09-07 12:20:18]
  • 评测
  • 测评结果:100
  • 用时:164ms
  • 内存:15008kb
  • [2023-09-07 12:20:16]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
#define fir first
#define sec second
typedef vector <int> vi;
typedef vector <ll> vl;

namespace IO {
const int MAXSIZE = 1 << 20;
char buf[MAXSIZE], *p1, *p2;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? EOF : *p1++)

char pbuf[MAXSIZE], *pp = pbuf;
void flush() { fwrite(pbuf, 1, pp - pbuf, stdout), pp = pbuf; }
inline void putchar(char ch) {
	if (pp == pbuf + MAXSIZE) flush();
	*pp++ = ch;
}
struct IO { ~IO () { flush(); } } __io;

char stk[40]; int tp;
namespace Public {
template <typename __Tp> void read(__Tp &x) {
	int f = 0; x = 0; char ch = getchar();
	for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = 1;
	for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);
	if (f) x = -x;
}
template <typename __Tp1, typename ...__Tp2> void read(__Tp1 &x, __Tp2 &...y) { read(x), read(y...); }
template <typename __Tp> void write(__Tp x) {
	if (x < 0) putchar('-'), x = -x;
	stk[tp = 1] = x % 10 + 48;
	while (x > 9) x /= 10, stk[++tp] = x % 10 + 48;
	while (tp) putchar(stk[tp]), tp--;
}
void write(char ch) { putchar(ch); }
template <typename __Tp1, typename ...__Tp2> void write(__Tp1 x, __Tp2 ...y) { write(x), write(y...); }
}
#undef getchar
}
using namespace IO :: Public;

#ifdef LCX
#define msg(args...) fprintf(stderr, args)
#else
#define msg(...) void()
#endif

const int maxn = 2e5 + 10;
ll n, a[maxn], s[maxn], p[maxn], q[maxn];
vl X;
struct BIT {
	ll c[maxn];
	void clr() { memset(c, 0, sizeof c); }
	void add(ll x, ll y) { for (; x <= n; x += x & -x) c[x] += y; }
	ll ask(ll x) {
		ll res = 0;
		for (; x > 0; x &= x - 1) res += c[x];
		return res;
	}
	ll ask(ll l, ll r) { return ask(r) - ask(l - 1); }
} tr, tr2;
void work() {
	read(n);
	for (int i = 0; i < n; ++i) read(a[i]), s[i] = a[i];
	for (int i = 1; i < n; ++i) s[i] += s[i - 1];

	ll S = s[n - 1];
	if (S < 0) return write(-1, '\n');
	if (S == 0) {
		int flg = 1;
		for (int i = 0; i < n; ++i) flg &= (a[i] == 0);
		if (flg) write(0, '\n');
		else write(-1, '\n');
		return;
	}

	X.clear();
	for (int i = 0; i < n; ++i)
		q[i] = (s[i] % S + S) % S,
		p[i] = (s[i] - q[i]) / S,
		X.push_back(q[i]);
	sort(begin(X), end(X)), X.erase(unique(begin(X), end(X)), end(X));
	for (int i = 0; i < n; ++i) q[i] = lower_bound(begin(X), end(X), q[i]) - begin(X) + 1;

	vi rk(n);
	iota(begin(rk), end(rk), 0);
	sort(begin(rk), end(rk), [&] (int i, int j) { return s[i] < s[j]; });

	ll sump = 0, ans = 0;
	tr.clr(), tr2.clr();
	for (int i = 0, j = 0; i < n; ++i) {
		int u = rk[i];
		msg("%d : %lld\n", u, s[u]);
		while (j < n && s[rk[j]] < s[u]) {
			int v = rk[j];
			msg("add %d\n", v);
			sump += p[v];
			tr.add(q[v], 1);
			tr2.add(v + 1, 1);
			j++;
		}
		ans += p[u] * j - sump + tr.ask(q[u] - 1) - tr2.ask(u);
	}
	write(ans, '\n');
}

int main() {
	// freopen("circle.in", "r", stdin), freopen("circle.out", "w", stdout);
	int T; read(T);
	while (T--) work();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 3ms
memory: 12744kb

input:

10
3
2 -9 -4
3
4 6 0
3
3 -10 0
3
7 -6 3
3
-6 7 10
3
-3 9 -2
3
6 1 -2
3
5 2 -2
3
-9 -5 7
3
-4 -5 6

output:

-1
0
-1
3
1
4
2
1
-1
-1

result:

ok 10 lines

Subtask #2:

score: 20
Accepted

Dependency #1:

100%
Accepted

Test #2:

score: 20
Accepted
time: 3ms
memory: 13000kb

input:

10
50
-5 -5 3 8 0 0 3 8 5 -7 6 -9 5 5 2 7 -9 1 -7 5 0 10 -6 -2 -6 -8 9 7 4 3 -9 9 5 9 8 1 7 0 0 -5 -1 -3 5 -7 5 -4 6 8 -1 1
50
-6 4 3 -6 -9 -8 -5 -2 -10 7 -4 1 -1 -5 2 1 -10 8 8 7 -8 -5 3 -6 10 3 2 -1 10 0 4 -6 9 3 -6 3 9 -4 4 -2 -3 4 -9 -7 7 1 5 2 -4 5
50
2 -10 5 3 -1 1 9 -1 -5 3 -2 -10 7 0 5 -5 -1...

output:

161
-1
249
-1
21873
-1
452
-1
-1
314

result:

ok 10 lines

Subtask #3:

score: 30
Accepted

Dependency #2:

100%
Accepted

Test #3:

score: 30
Accepted
time: 6ms
memory: 13928kb

input:

10
2000
-4438 -448 2902 3873 -5348 1821 -5284 2787 -1369 -4712 3298 2808 1651 -4568 4377 870 2217 -2683 1217 120 -3854 1156 -2129 -3757 -2704 3026 -1745 -5327 -1315 405 3944 340 -1510 2213 -24 -32 -5414 -2330 760 3715 -4871 2831 1917 3148 1360 -3662 -4281 -1248 788 1334 -3401 2050 4174 3163 -2456 33...

output:

90206708583
9272643195
2640993721
148400379
20504656
2904294
-1
6666669000000
61998
67150

result:

ok 10 lines

Subtask #4:

score: 10
Accepted

Test #4:

score: 10
Accepted
time: 37ms
memory: 14352kb

input:

10
30000
-3879 -556 4570 1863 2815 -4010 2471 -270 2835 3071 -3331 -1251 -2243 4221 -5249 -4134 3376 1978 858 2545 -4207 386 3875 2029 1706 1119 3065 -3097 4399 4385 -3021 2473 2506 2157 3946 -886 3929 1478 2728 -4239 4091 -151 -4762 -2136 -1424 2162 -669 267 190 -1180 2640 -757 -2078 -1409 3165 216...

output:

121860198793245
46938573692959
57703965834328
59944493006183
81807878531011
49309954483988
78546660217267
113040545520897
33896072757379
62212580026212

result:

ok 10 lines

Subtask #5:

score: 10
Accepted

Dependency #4:

100%
Accepted

Test #5:

score: 10
Accepted
time: 29ms
memory: 13900kb

input:

10
30000
-2595 -3716 4165 858 -5266 -3829 811 -2088 3328 3550 4682 -4106 1810 -1775 -470 189 2599 -4024 2125 1382 2756 3173 1951 975 3411 389 4564 3431 -4952 4333 -2522 2676 2205 -105 -3087 -1781 4430 2299 4505 1113 -826 312 1429 52 -985 2395 2056 -2832 1613 -3243 3271 2772 -2816 -3652 4580 1365 123...

output:

-1
66307718106454
20087854603233
17527604892002
14265304369524
24031060577728
6589862789507
11905532141244
8996204627296
6585172490432

result:

ok 10 lines

Subtask #6:

score: 10
Accepted

Dependency #5:

100%
Accepted

Test #6:

score: 10
Accepted
time: 52ms
memory: 13692kb

input:

10
30000
-2244 -2644 2809 3538 -285 1898 -2058 -24 2091 2790 -2955 1099 -5143 1121 -3846 -999 -4595 3085 3334 -4501 -5091 358 -3560 -3527 4423 2862 4342 -2080 4525 2521 4106 -5224 1559 3007 -398 4417 -351 -5309 2315 3950 -1249 3651 -2944 -3367 3232 -1595 2952 -2194 4228 -4421 -4415 -88 -2072 3485 -1...

output:

85413029344138
4691174120217
246528544689
26919261466
816932685
45240604
-1
22499999825000000
1482487
1674097

result:

ok 10 lines

Subtask #7:

score: 10
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

100%
Accepted

Dependency #6:

100%
Accepted

Test #7:

score: 10
Accepted
time: 164ms
memory: 15008kb

input:

10
100000
-295 3757 395 376 4467 -4688 -3479 1495 -2386 687 -1139 4137 2777 4198 2479 3744 -1902 1207 3000 -5091 1112 2776 -1673 4050 -5247 -3011 -1961 2442 -5024 3036 226 3508 2020 -1793 4283 3340 -115 2844 -3134 -847 -4850 3377 -1756 3602 4408 4043 69 -4157 -2612 3591 2041 -1034 4648 3484 -1086 12...

output:

1335845168539966
35870296157487
1936542233238
42129253701
1713350305
3538646
-1
833333331000000000
4603056
4382225

result:

ok 10 lines