QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#104415#5374. 数圈AvavaAva90 1633ms24580kbC++143.2kb2023-05-10 17:15:092023-05-10 17:15:11

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-10 17:15:11]
  • 评测
  • 测评结果:90
  • 用时:1633ms
  • 内存:24580kb
  • [2023-05-10 17:15:09]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[100005];
struct qwq
{
	int op,x,y,z;
}c[1000005];
int ans;
bool cmp(qwq x,qwq y)
{
	return x.x>y.x||x.x==y.x&&x.op<y.op;
}
bool cmpy(qwq x,qwq y)
{
	return x.y<y.y||x.y==y.y&&x.op<y.op;
}
int cntop=0;
struct BIT
{
	int tree[500005];
	void init()
	{
		memset(tree,0,sizeof tree);
	}
	int lowbit(int x)
	{
		return x&-x;
	}
	void add(int x,int y)
	{
		for(x+=5;x<=500000;x+=lowbit(x)) tree[x]+=y;
	}
	int ask(int x)
	{
		int rtn=0;
		for(x+=5;x;x^=lowbit(x)) rtn+=tree[x];
		return rtn;
	}
}T;
const int inf=8e18;
int Div(int x,int d)
{
	return (x+inf/d*d)/d-inf/d;
}
vector<int> S,Sy;
int rk(int x)
{
	return lower_bound(S.begin(),S.end(),x)-S.begin();
}
int RK(int x)
{
	return lower_bound(Sy.begin(),Sy.end(),x)-Sy.begin();
}
qwq v[1000005];
int sz=0;
void SOLVE(int l,int r)
{
	if(l>=r) return ;
	int mid=(l+r)/2;
	SOLVE(l,mid),SOLVE(mid+1,r);
	sz=0;
	for(int i=l;i<=mid;i++)
		if(c[i].op==0) v[++sz]=c[i];
	for(int i=mid+1;i<=r;i++)
		if(c[i].op!=0) v[++sz]=c[i];
	sort(v+1,v+sz+1,cmpy);
	vector<int> clr;
	for(int i=1;i<=sz;i++)
	{
		auto t=v[i];
		int R=rk(t.z);
		if(t.op==0) T.add(R,1),clr.push_back(R);
		else ans+=T.ask(R);
	}
	for(auto t:clr) T.add(t,-1);
}
void solve()
{
	cntop=0;
	int n;
	cin >> n;
	for(int i=1;i<=n;i++) cin >> a[i];
	for(int i=1;i<=n;i++) a[i]+=a[i-1];
	if(a[n]<0)
	{
		cout << "-1\n";
		return ;
	}
	if(a[n]==0)
	{
		int flag=0;
		for(int i=1;i<=n;i++) if(a[i]) flag=1;
		if(flag)
		{
			cout << "-1\n";
			return ;
		}
		cout << "0\n";
		return ;
	}
	int d=a[n];
	ans=0;
	int MN=0;
	for(int i=1;i<=n;i++) MN=min(MN,a[i]);
	for(int i=1;i<=n;i++) a[i]-=MN;
	for(int i=1;i<=n;i++)
		c[++cntop]={0,i,a[i]%d,a[i]};
	S.clear(),Sy.clear();
	for(int i=1;i<=n;i++) S.push_back(a[i]-1),S.push_back(a[i]),S.push_back(a[i]-2),S.push_back(a[i]+1);
	sort(S.begin(),S.end());
	BIT T,TT;
	T.init(),TT.init();
	for(int i=n;i>=1;i--)
	{
		//y<x
		int x=a[i]+d-1;
		int k=(x)%d;
		if(k<0) k+=d;
		int w=Div((x),d);
		c[++cntop]={2,i+1,k,a[i]-1};
		ans+=T.ask(rk(a[i]-1))*(w-1);
		ans+=TT.ask(rk(a[i]-1));
		T.add(rk(a[i]),1);
		TT.add(rk(a[i]),-(a[i])/d);
	}
	T.init(),TT.init();
	for(int i=n;i>=1;i--)
	{
		//y>x+d
		int x=a[i];
		int k=(x+1)%d;
		if(k<0) k+=d;
		int w=Div((x+1),d)+1;
		c[++cntop]={1,i+1,k,x+1};
		ans-=(T.ask(400000)-T.ask(rk(a[i])))*(w);
		ans+=(TT.ask(400000)-TT.ask(rk(a[i])));
		T.add(rk(a[i]),1);
		TT.add(rk(a[i]),(a[i])/d);
	}
	for(int i=1;i<=n;i++) Sy.push_back(a[i]%d);
	for(int i=1;i<=cntop;i++) if(c[i].op==1) Sy.push_back(c[i].y-1);
	sort(Sy.begin(),Sy.end());
	int qwq=0;
	sort(c+1,c+cntop+1,cmp);
	int nw=n;
	T.init(),TT.init();
	for(int i=1;i<=cntop;i++)
	{
		if(c[i].op==1)
		{
			ans-=TT.ask(RK(c[i].y-1));
			ans+=n-c[i].x+1;
			ans-=T.ask(rk(c[i].z-1));
			c[i].op=2,c[i].y--,c[i].z--;
		}
		if(c[i].op==0) T.add(rk(c[i].z),1),TT.add(RK(c[i].y),1);
	}
	sort(c+1,c+cntop+1,cmp);
	SOLVE(1,cntop);
	cout << ans << "\n";
}
signed main()
{
//	freopen("circle4.in","r",stdin);
//	freopen("circle.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	int greg;
	cin >> greg;
	while(greg--) solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 10ms
memory: 19352kb

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: 9ms
memory: 17320kb

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: 87ms
memory: 19580kb

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: 1633ms
memory: 22768kb

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: 1616ms
memory: 24580kb

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: 1548ms
memory: 24576kb

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: 0
Time Limit Exceeded

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: 0
Time Limit Exceeded

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:


result: