FHQ_Treap 5pts WA 求调
查看原帖
FHQ_Treap 5pts WA 求调
779970
lunjiahao楼主2024/5/10 07:34
#include<bits/stdc++.h>
#define int long long
#define ls(u) t[u].ls
#define rs(u) t[u].rs
using namespace std;
const int N=1e5+5;
const int INF=1e18;
int n,k,root,cnt,ansl,ansr;
int a[N],ans=INF;
struct FHQ_Treap
{
	int ls,rs;
	int val,sum;
	int pri,siz;
}t[N];
void update(int u)
{
	t[u].siz=t[ls(u)].siz+t[rs(u)].siz+1;
	t[u].sum=t[ls(u)].sum+t[rs(u)].sum+t[u].val;
}
int newNode(int x)
{
	int u=++cnt;
	t[u].ls=t[u].rs=0;
	t[u].val=t[u].sum=x;
	t[u].pri=rand();
	t[u].siz=1;
	return u;
}
void spilt(int u,int x,int &L,int &R)
{
	if(!u)
	{
		L=R=0;
		return;
	}
	if(t[u].val<=x)
	{
		L=u;
		spilt(rs(u),x,rs(u),R);
	}
	else
	{
		R=u;
		spilt(ls(u),x,L,ls(u));
	}
	update(u);
}
int merge(int L,int R)
{
	if(!L||!R) return L|R;
	if(t[L].pri>t[R].pri)
	{
		t[L].rs=merge(t[L].rs,R);
		update(L);
		return L;
	}
	else
	{
		t[R].ls=merge(L,t[R].ls);
		update(R);
		return R;
	}
}
void insert(int x)
{
	int L,R;
	spilt(root,x,L,R);
	root=merge(merge(L,newNode(x)),R);
}
void del(int x)
{
	int L,R,p;
	spilt(root,x,L,R);
	spilt(L,x-1,L,p);
	p=merge(t[p].ls,t[p].rs);
	root=merge(merge(L,p),R);
}
int kth(int u,int k)
{
	if(k==t[ls(u)].siz+1) return u;
	if(k<=t[ls(u)].siz) return kth(ls(u),k);
	if(k>t[ls(u)].siz) return kth(rs(u),k-t[ls(u)].siz-1);
}
int query(int x)
{
	int L,R,p;
	spilt(root,x,L,R);
	spilt(L,x-1,L,p);
	int ans=t[L].siz*x-t[L].sum+t[R].sum-t[R].siz*x;
	root=merge(merge(L,p),R);
	return ans;
}
signed main()
{
	srand(time(0));
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)	
		scanf("%lld",&a[i]);
	for(int i=0;i<k;i++)
		insert(a[i]);
	for(int i=k;i<=n;i++)
	{
		int mid;
		del(a[i-k]),insert(a[i]);
		if(k&1) mid=t[kth(root,k/2+1)].val;
			else mid=(t[kth(root,k/2)].val+t[kth(root,k/2+1)].val)/2;
		int res=query(mid);
		if(res<ans)
			ans=res,ansl=i-k+1,ansr=i;
	}
	printf("%lld\n",ans);
	for(int i=1;i<ansl;i++) printf("%lld\n",a[i]);
	for(int i=ansl;i<=ansr;i++) printf("%lld\n",ans);
	for(int i=ansr+1;i<=n;i++) printf("%lld\n",a[i]);
	return 0;
}

在 P2263 改一下过了,在这里过不了

2024/5/10 07:34
加载中...