QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#627583#7904. Rainbow SubarraykrisWA 237ms8356kbC++142.7kb2024-10-10 16:22:552024-10-10 16:22:56

Judging History

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

  • [2024-10-10 16:22:56]
  • 评测
  • 测评结果:WA
  • 用时:237ms
  • 内存:8356kb
  • [2024-10-10 16:22:55]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long maxn=2e6+5;
const long long inf=0x3f3f3f3f;
long long a[maxn],pre[maxn];
multiset<long long> s,b;
long long sums=0,sumb=0;
long long n,K;
void add(long long A)
{
	if(s.empty())
	{
		s.insert(A);
		sums+=A;
		return ;
	}
	if(A>*s.rbegin())
	{
		b.insert(A);
		sumb+=A;
	}
	else
	{
		s.insert(A);
		sums+=A;
	}
	long long num=s.size()+b.size();
	long long yg=num/2;
	if(num%2==1)
		yg++;
	if(s.size()>yg)
	{
		long long cha=s.size()-yg;
		for(int i=1;i<=cha;i++)
		{
			long long x=*s.rbegin();
			s.erase(s.find(x));
			b.insert(x);
			sums-=x;
			sumb+=x;
		}
	}
	else if(yg>s.size())
	{
		long long cha=yg-s.size();
		for(int i=1;i<=cha;i++)
		{
			long long x=*b.begin();
			b.erase(b.find(x));
			s.insert(x);
			sumb-=x;
			sums+=x;
		}
	}
}
void del(long long X)
{
	if(s.empty())
		return ;
	if(X>*s.rbegin())
	{
		if(b.empty())
			return ;
		b.erase(b.find(X));
		sumb-=X;
		long long num=s.size()+b.size();
		long long yg=num/2;
		if(num%2==1)
			yg++;
		long long cha=s.size()-yg;
		for(int i=1;i<=cha;i++)
		{
			long long x=*s.rbegin();
			s.erase(s.find(x));
			b.insert(x);
			sums-=x;
			sumb+=x;
		}
	}
	else
	{
		s.erase(s.find(X));
		sums-=X;
		long long num=s.size()+b.size();
		long long yg=num/2;
		if(b.size()>yg)
		{
			long long cha=b.size()-yg;
			for(int i=1;i<=cha;i++)
			{
				long long x=*b.begin();
				b.erase(b.find(x));
				s.insert(x);
				sumb-=x;
				sums+=x;
			}
		}
	}
//	for(auto xx:s)
//		cout<<xx<<" ";
//	cout<<endl;
//	for(auto xx:b)
//		cout<<xx<<" ";
//	cout<<endl;
}
bool check()
{
	long long zw=*s.rbegin();
	if(sumb-b.size()*zw+s.size()*zw-sums>K)
		return true;
	return false;
}
int main()
{
	long long t;
	cin>>t;
	while(t--)
	{
		cin>>n>>K;
		for(long long i=1;i<=n;i++)
		{
			cin>>a[i];
			a[i]-=i;
			pre[i]=pre[i-1]+a[i];
		}
		if(n==1)
		{
			cout<<"1\n";
			continue;
		}
//		for(long long i=1;i<=n;i++)
//			cout<<a[i]<<" ";
//		cout<<endl;
	
		long long ans=1;
		s.clear();b.clear();
		sums=0;sumb=0;
//		for(long long l=1,r=1;r<=n;r++)
//		{
//			add(a[r]);
//			while(l<=r&&check())
//			{
//				del(a[l]);
//				l++;
//			}
//			long long nw=s.size()+b.size();
//			ans=max(ans,nw);
//		}
//		cout<<ans<<"\n";
		
		long long r=1;
		for(long long l=1;l<=n;l++)
		{
			if(r==n)
				continue;
			del(a[l-1]);
			add(a[l]);
			r=max(l,r);
			
			while(r<n)
			{
				r++;
				add(a[r]);
				if(check())
				{
					del(a[r]);
					r--;
					break;
				}
			}
//			cout<<l<<" "<<r<<"\n";
			long long nw=s.size()+b.size();
//			ans=max(ans,r-l+1);
			ans=max(ans,nw);
		}
		cout<<ans<<"\n";
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 5616kb

input:

5
7 5
7 2 5 5 4 11 7
6 0
100 3 4 5 99 100
5 6
1 1 1 1 1
5 50
100 200 300 400 500
1 100
3

output:

4
3
5
1
1

result:

ok 5 lines

Test #2:

score: -100
Wrong Answer
time: 237ms
memory: 8356kb

input:

11102
2 167959139
336470888 134074578
5 642802746
273386884 79721198 396628655 3722503 471207868
6 202647942
268792718 46761498 443917727 16843338 125908043 191952768
2 717268783
150414369 193319712
6 519096230
356168102 262263554 174936674 407246545 274667941 279198849
9 527268921
421436316 3613460...

output:

1
4
3
2
6
6
7
2
4
1
4
1
1
3
2
2
7
8
7
8
1
7
6
2
4
3
1
5
8
7
3
4
3
10
4
8
6
6
3
1
7
4
1
2
4
7
4
6
4
1
5
7
1
7
3
5
7
7
1
7
5
3
1
6
5
5
3
2
3
7
2
3
10
1
5
4
2
5
5
1
8
5
5
6
8
6
3
6
3
5
6
9
6
3
5
2
1
6
2
4
3
4
8
1
4
1
2
2
9
4
1
6
8
1
8
4
5
6
6
9
4
8
3
2
9
4
5
7
2
7
2
4
1
5
4
5
3
3
5
1
2
1
5
5
6
4
7
4
3
...

result:

wrong answer 6th lines differ - expected: '5', found: '6'