#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int re()
{
char ch=getchar();
int f=1,ret=0;
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
ret=(ret<<1)+(ret<<3)+ch-'0';
ch=getchar();
}
return ret;
}
const int N=5e5+10;
int k,n,m,t;
int a[N];
int p,l,r,ans;
vector<int>s,ss,sss;
inline vector<int>mer(vector<int>&x,vector<int>&y)
{
vector<int>ret;
int i=0,j=0;
while(i<x.size()&&j<y.size())
{
if(x[i]<=y[j])ret.push_back(x[i]),i++;
else ret.push_back(y[j]),j++;
}
while(i<x.size())ret.push_back(x[i]),i++;
while(j<y.size())ret.push_back(y[j]),j++;
return ret;
}
inline bool check(int x,int y)
{
if(y>n)return 0;
if(x>=y)return 1;
int ret=0;
ss.clear();
sss.clear();
for(int i=x+s.size();i<=y;i++)ss.push_back(a[i]);
stable_sort(ss.begin(),ss.end());
sss=mer(s,ss);
for(int i=0;i<min((int)sss.size()/2,m);i++)ret+=(sss[i]-sss[sss.size()-1-i])*(sss[i]-sss[sss.size()-1-i]);
if(ret<=t)
{
s=sss;
return 1;
}
return 0;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
k=re();
while(k--)
{
n=re(),m=re(),t=re(),ans=0;
for(int i=1; i<=n; i++)a[i]=re();
p=1,l=1,r=0;
while(r<n)
{
if(r!=0)l=r+1;
p=1;
s.clear();
while(p)
{
if(check(l,p+r))
{
r+=p;
p<<=1;
}
else p>>=1;
}
ans++;
}
cout<<ans<<"\n";
}
return 0;
}
Acwing 109. 天才ACM
最新推荐文章于 2023-04-20 15:21:06 发布