T了,求助
查看原帖
T了,求助
229801
az__eg楼主2022/7/10 13:46
#include<bits/stdc++.h>
using namespace std;
int n;
int w;
int k;
int a[200086];
int t[200086];
int ans = -114514;
multiset<int> bj;
multiset<int> qj;
int main()
{
	int i,j;
	scanf("%d%d%d",&n,&w,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=1;i<=n;i++)
	{
		scanf("%d",&t[i]);
	}
	int l = 1,r = 0;
	int now = 0,happy = 0;
	for(r=1;r<=n;r++)
	{
	//	printf("1");
		now += (t[r]+1)/2;
		happy += a[r];
		bj.insert(t[r]);
//		printf("%d ",bj.size());
		if(bj.size()>w)
		{
	//		printf("aaaYes ");
			int zzc = *bj.begin();
			now+=zzc/2;
			qj.insert(zzc);
			bj.erase(bj.begin());
		}
		else
		{
			//let me in
//			printf("No ");
		}
//		printf("%d ",now);
		while(l<=r&&now>k)
		{
			if(t[l]>=*bj.begin())
			{
//				printf("%d ",now);
				now -= (t[l]+1)/2;
				
				bj.erase(bj.find(t[l]));
				if(qj.size()>=1)
				{
					multiset<int>::iterator _ = qj.end();
					--_;
					qj.erase(_);
					bj.insert(*_);
					now -= (*_)/2;
				}
			}
			else
			{
				now -= t[l];
				qj.erase(qj.find(t[l]));
			}
			happy -= a[l++];
		}
		ans = max(ans,happy);
	//	printf("%d %d %d %d\n",now,l,r,happy);
	}
	printf("%d",ans);
}

这段不是O(n log n)吗?为啥会T

2022/7/10 13:46
加载中...