QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#99705#6355. 518MichaelTL 4065ms52376kbC++143.5kb2023-04-23 15:22:382023-04-23 15:22:42

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-23 15:22:42]
  • 评测
  • 测评结果:TL
  • 用时:4065ms
  • 内存:52376kb
  • [2023-04-23 15:22:38]
  • 提交

answer

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int MxN=200002,MxV=MxN*2+20;
int n,s,s1,t,i0=0,i1=1,res=0;
LL ans=0;
int a[MxN],st[MxV],ed[MxV];
map<int,int> mp;
map<int,int>::iterator it;
typedef pair<int,int> P;
vector<P> tmp;
vector<P> pre[MxV];
vector<P> vec[2][MxV];
template<class T>void read(T &x)
{
	x=0;int f=0;char ch=getchar();
	while(ch<'0' || ch>'9')f|=(ch=='-'),ch=getchar();
	while(ch>='0' && ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	x=f? -x:x;return ;
}
inline void clear()
{
	for(int i=0;i<=s1;++i)vec[i1][i].clear();
}
inline vector<P> merge(vector<P> &A,vector<P> &B)
{
	if(!A.size())return B;
	if(!B.size())return A;
	vector<P> C;
	int tA=0,tB=0;
	P p;
	for(;tA<A.size() && tB<B.size();)
	{
		if(A[tA].first<B[tB].first)p=A[tA],++tA;
		else p=B[tB],++tB;
		f1:
		if(tA<A.size() && A[tA].first<=p.second)
		{
			p.second=max(p.second,A[tA].second),++tA;
			goto f1;
		}
		if(tB<B.size() && B[tB].first<=p.second)
		{
			p.second=max(p.second,B[tB].second),++tB;
			goto f1;
		}
		C.push_back(p);
	}
	for(;tA<A.size();)
	{
		p=A[tA],++tA;
		f2:
		if(tA<A.size() && A[tA].first<=p.second)
		{
			p.second=max(p.second,A[tA].second),++tA;
			goto f2;
		}
		C.push_back(p);
	}
	for(;tB<B.size();)
	{
		p=B[tB],++tB;
		f3:
		if(tB<B.size() && B[tB].first<=p.second)
		{
			p.second=max(p.second,B[tB].second),++tB;
			goto f3;
		}
		C.push_back(p);
	}
	return C;
}
inline void print()
{
	printf("vec:\n");
	for(int i=0;i<=s1;++i)if(vec[i0][i].size())
	{
		printf(" %d:",i);
		for(int j=0;j<vec[i0][i].size();++j)printf("(%d,%d)%c",vec[i0][i][j].first,vec[i0][i][j].second,j+1==vec[i0][i].size()? '\n':' ');
	}
}
inline void RSH(vector<P> &vec,int o)
{
	for(int i=0;i<vec.size();++i)vec[i].first+=o,vec[i].second+=o;
}
inline void solve1()
{
	int a=abs((*it).first),b=(*it).second,sgn=((*it).first<0? -1:1);
	//printf("a:%d b:%d sgn:%d\n",a,b,sgn);
	clear();
	for(int i=0,x;i<=s1;++i)
	{
		x=i/a,st[i]=x,ed[i]=x-b*sgn;
		if(st[i]>ed[i])swap(st[i],ed[i]);
	}
	for(int i=0;i<a;++i)
	{
		int tot=(s1-i)/a;
		for(int j=i;j<=s1;j+=a)
		{
			int x=j/a;
			pre[x]=vec[i0][j];
			RSH(pre[x],-x*sgn);
		}
		for(int j=0;j<=tot;++j)
		{
			if(!(j%b))tmp=pre[j];
			else tmp=merge(tmp,pre[j]);
			if(sgn>0)vec[i1][j*a+i]=tmp;
			else if((j-b)*a+i>=0)vec[i1][(j-b)*a+i]=tmp;
		}
		if(sgn<0)for(int j=tot-b+1;j<=tot && j%b;++j)if(j*a+i>=0)vec[i1][j*a+i]=tmp;
		tmp.clear();
		for(int j=tot;j>=0;--j)
		{
			if(!((j+1)%b))tmp=pre[j];
			else tmp=merge(tmp,pre[j]);
			if(sgn>0)
			{
				if((j+b)*a+i<=s1)vec[i1][(j+b)*a+i]=merge(vec[i1][(j+b)*a+i],tmp);
			}
			else vec[i1][j*a+i]=merge(vec[i1][j*a+i],tmp);
		}
	}
	for(int i=0;i<=s1;++i)RSH(vec[i1][i],(i/a)*sgn);
	i0^=1,i1^=1;
}
inline void solve3()
{
	assert(n-s/5+1>=0);
	for(int i=s1;~i;--i)vec[i0][i+n-s/5+1]=vec[i0][i];
	for(int i=n-s/5;~i;--i)vec[i0][i].clear();
	s1+=n-s/5+1,solve1();
}
int main()
{
	//freopen("L.in","r",stdin);
	read(n),read(s);
	for(int i=1;i<=n;++i)read(a[i]),res+=(!a[i])-(a[i]==1);
	
	//res=-1;
	
	if(res>=0)s1=s;
	else
	{
		s1=4*s/5+1;
		for(int i=1;i<=n;++i)--a[i];
	}
	for(int i=1;i<=n;++i)++mp[a[i]];
	t=mp[0],vec[0][0].push_back(P(0,t));
	for(it=mp.end();it!=mp.begin();)
	{
		--it;
		if(!(*it).first)continue;
		if((*it).first>0)solve1();
		else solve3();
		//print();
	}
	for(int i=0;i<=s1;++i)for(int j=0;j<vec[i0][i].size();++j)ans+=vec[i0][i][j].second-vec[i0][i][j].first+1;
	return 0&printf("%lld",ans);
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 8ms
memory: 31740kb

input:

7 9
0 0 0 1 1 2 5

output:

42

result:

ok 1 number(s): "42"

Test #2:

score: 0
Accepted
time: 7ms
memory: 32296kb

input:

10 33
9 9 8 1 1 1 1 1 1 1

output:

48

result:

ok 1 number(s): "48"

Test #3:

score: 0
Accepted
time: 4ms
memory: 31676kb

input:

10 14
2 4 4 1 0 1 0 1 0 1

output:

81

result:

ok 1 number(s): "81"

Test #4:

score: 0
Accepted
time: 7ms
memory: 33240kb

input:

10 14
3 5 3 0 1 0 1 0 1 0

output:

87

result:

ok 1 number(s): "87"

Test #5:

score: 0
Accepted
time: 3ms
memory: 31760kb

input:

40 50
1 1 1 1 3 3 0 3 1 1 0 0 2 1 0 0 1 0 0 2 7 1 2 1 3 0 2 2 3 1 1 0 0 2 0 1 1 0 1 1

output:

1067

result:

ok 1 number(s): "1067"

Test #6:

score: 0
Accepted
time: 7ms
memory: 33460kb

input:

1200 1000
1 1 2 3 0 1 0 0 1 1 0 2 3 0 1 2 0 0 1 0 4 1 1 2 1 1 0 0 1 1 0 1 0 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 2 0 4 0 3 1 6 0 1 1 0 0 0 0 4 0 0 0 0 0 0 1 0 0 1 7 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 3 0 1 0 1 0 0 1 1 2 2 0 1 1 0 0 1 4 1 2 0 0 0 3 0 0 2 1 0 2 0 0 0 1 1 0 0 2 0 0 0 0 1 1 0 1 0 1 6 1 1 ...

output:

737899

result:

ok 1 number(s): "737899"

Test #7:

score: 0
Accepted
time: 17ms
memory: 32564kb

input:

12000 10000
1 1 0 0 1 0 2 1 3 0 0 1 0 3 1 1 0 1 1 1 1 1 2 1 0 1 2 1 0 1 2 0 5 1 1 1 0 2 0 1 0 1 0 3 2 0 1 0 1 1 2 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 0 4 0 1 3 1 0 0 1 0 1 2 1 0 0 1 1 0 2 1 1 0 1 0 1 0 0 2 1 1 3 0 1 1 1 0 0 0 1 1 1 0 3 0 0 0 2 0 0 0 1 0 2 0 1 1 1 0 0 1 0 1 0 2 0 0 0 0 0 0 0 1 0 1 0 0 4 1 ...

output:

73685347

result:

ok 1 number(s): "73685347"

Test #8:

score: 0
Accepted
time: 31ms
memory: 34020kb

input:

36000 30000
0 3 4 1 2 1 1 0 0 1 1 0 1 0 2 1 0 0 0 0 2 1 0 2 0 0 0 0 0 1 1 4 1 4 0 0 2 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 0 3 1 1 1 0 0 0 0 0 0 1 2 0 2 3 0 0 0 0 3 1 0 0 0 1 0 1 2 0 0 2 0 1 0 0 2 1 1 0 3 1 6 0 0 1 1 2 0 1 2 0 0 1 0 1 1 0 0 1 0 0 0 1 0 2 0 1 1 1 0 0 5 2 0 5 1 0 0 0 0 1 1 1 8 0 1 1 0 1 ...

output:

658813003

result:

ok 1 number(s): "658813003"

Test #9:

score: 0
Accepted
time: 237ms
memory: 47784kb

input:

200000 200000
0 1 1 1 1 1 0 1 0 3 1 0 0 1 1 0 1 1 1 2 3 0 1 0 1 0 2 5 0 1 1 4 1 1 0 0 0 0 0 0 2 1 0 0 2 1 1 2 0 3 0 1 3 0 1 1 1 0 1 0 1 2 0 1 1 0 0 2 2 1 0 1 1 2 4 1 0 2 0 5 1 2 0 0 1 0 2 3 1 0 1 1 1 1 0 0 0 5 1 0 0 1 2 1 1 0 0 0 1 0 0 1 2 1 0 0 2 1 2 3 0 0 3 1 0 1 0 0 1 1 1 0 1 0 1 0 0 1 0 0 1 1 1 ...

output:

23477878007

result:

ok 1 number(s): "23477878007"

Test #10:

score: 0
Accepted
time: 280ms
memory: 52376kb

input:

140000 200000
0 1 3 0 0 0 0 0 1 1 1 1 4 1 1 8 1 1 0 3 0 0 0 1 5 0 1 1 0 4 1 0 2 1 0 0 1 1 1 0 2 4 0 2 0 3 0 2 1 2 1 2 1 1 1 2 1 0 0 1 1 1 1 0 1 0 9 1 5 1 1 4 0 1 1 4 1 1 1 1 3 1 1 1 1 4 1 1 0 3 1 0 1 3 1 1 3 1 1 3 4 1 1 0 0 1 1 0 1 4 1 1 1 1 0 1 1 0 0 2 0 6 5 1 1 3 2 4 0 1 4 1 1 1 1 2 0 0 2 1 5 1 1 ...

output:

15405328745

result:

ok 1 number(s): "15405328745"

Test #11:

score: 0
Accepted
time: 404ms
memory: 50156kb

input:

90000 200000
3 1 1 1 4 5 1 1 1 1 10 1 3 2 1 1 7 8 1 1 8 5 1 1 6 1 1 1 0 1 4 5 0 5 1 21 1 4 0 2 4 3 1 6 7 3 1 1 1 0 1 2 5 1 1 1 1 2 0 8 0 1 2 4 0 0 11 1 2 2 2 1 28 0 1 1 2 1 2 1 11 1 5 9 1 1 1 1 1 2 1 1 1 1 2 1 0 4 1 1 2 1 1 1 4 1 5 1 1 5 4 1 5 1 0 1 1 1 1 0 1 2 4 1 1 1 1 1 1 1 1 1 2 1 1 3 1 2 1 1 0 ...

output:

9895248405

result:

ok 1 number(s): "9895248405"

Test #12:

score: 0
Accepted
time: 516ms
memory: 50148kb

input:

80000 200000
1 5 1 1 1 3 1 0 3 11 1 5 1 2 1 21 4 13 1 1 1 1 0 1 1 1 2 1 13 2 1 4 5 0 1 1 6 3 1 1 1 1 1 1 8 1 1 6 3 1 1 1 1 8 1 2 0 1 1 1 1 1 1 1 17 1 1 1 6 1 1 1 11 1 15 5 1 1 1 1 1 2 8 0 0 1 1 2 3 14 1 1 3 18 1 1 1 3 1 1 1 1 1 1 4 0 9 1 0 1 1 1 0 4 1 2 1 1 3 2 3 21 3 2 11 1 1 0 1 29 1 1 2 1 5 6 1 5...

output:

8980751457

result:

ok 1 number(s): "8980751457"

Test #13:

score: 0
Accepted
time: 696ms
memory: 49284kb

input:

70000 200000
4 0 0 2 5 1 0 1 4 1 1 1 1 3 12 1 1 1 0 1 1 6 5 1 1 1 1 1 0 1 1 1 16 1 1 1 1 1 10 1 2 1 1 0 1 7 1 0 3 3 1 1 1 1 2 2 1 1 7 1 1 2 1 1 1 1 14 1 6 1 1 12 1 1 1 1 1 1 1 7 1 1 1 7 1 1 1 1 2 1 0 1 13 1 0 1 1 1 3 1 3 1 0 1 4 1 1 1 1 3 1 13 0 1 1 7 0 0 1 1 12 3 1 1 3 1 1 1 6 1 1 1 1 1 1 1 1 10 1 ...

output:

8196878191

result:

ok 1 number(s): "8196878191"

Test #14:

score: 0
Accepted
time: 901ms
memory: 48608kb

input:

60000 200000
1 1 1 1 25 1 4 1 1 1 1 1 10 2 12 1 1 1 1 1 12 7 3 1 3 1 1 1 1 1 1 1 1 1 1 1 1 2 1 12 1 1 1 1 0 1 1 3 1 6 1 6 1 1 2 29 1 0 1 13 3 1 1 0 1 1 5 3 1 1 1 1 1 1 7 1 0 9 1 7 1 1 12 4 1 1 1 23 1 4 24 1 36 1 23 1 18 29 1 1 11 1 1 1 1 1 1 0 1 1 2 13 1 32 1 3 1 0 1 1 1 1 5 23 9 1 1 1 8 12 14 1 1 1...

output:

7466221263

result:

ok 1 number(s): "7466221263"

Test #15:

score: 0
Accepted
time: 1632ms
memory: 48316kb

input:

50000 200000
1 1 87 20 1 1 1 1 1 1 1 1 41 1 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 5 1 1 1 1 1 1 1 17 1 1 1 1 1 14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 17 18 1 1 1 1 1 13 1 1 1 1 1 32 1 1 7 1 10 1 1 1 1 14 20 1 1 1 1 1 3 23 27 1 1 1 9 1 1 1 1 4 8 1 12 1 1 1 53 1 1 1 1 26 1 1 1 1 1 1 1 1 1 1 1...

output:

6870036861

result:

ok 1 number(s): "6870036861"

Test #16:

score: 0
Accepted
time: 3066ms
memory: 49072kb

input:

45000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 26 1 1 10 1 1 1 1 1 1 1 1 1 1 1 50 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 1 1 1 1...

output:

6615361583

result:

ok 1 number(s): "6615361583"

Test #17:

score: 0
Accepted
time: 4065ms
memory: 49056kb

input:

44000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 1 16 1 1 1 1 104 1 1 1 1 1 1 50 23 1 1 1 1 1 1 23 1 18 1 1 1 1 1 1 1 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 1 1 1 1 1 1 1 49 1 1 1 1 1 1 1 1 1 1 1 1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 76 1 1 1 1 1 1 1 1 1 149 1 1 1 1 1 0 1 1...

output:

6575348967

result:

ok 1 number(s): "6575348967"

Test #18:

score: -100
Time Limit Exceeded

input:

43000 200000
1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 1 1 1 1 104 1 1 1 1 1 1 1 1 20 1 1 1 1 1 1 1 16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13 1 1 1 1 1 1 1 1 1 1 1 1 1 7 1 1 1 65 1 1 1 1 138 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 62 1 1 1 1...

output:


result: