代码:
#include <bits/stdc++.h>
#define gc getchar()
#define pc(c) putchar(c)
#define int long long
using namespace std;
const int N=500007;
int n,m,t,a[N];
inline int read(){
register int t=0;
register char c=gc;
while(c<'0'||c>'9') c=gc;
while(c>='0'&&c<='9') t=10*t+(c^48),c=gc;
return t;
}
void write(int x){
if(x>=10){
write(x/10);
}
pc((x%10)|48);
}
void merge(int l,int r,int mid){
/*merge([l,mid],[mid+1,r])*/
register int i=l,j=mid+1,k;
static int b[N];
for(k=l;k<=r;++k){
if(j>r||(i<=mid&&a[i]<=a[j])){
b[k]=a[i++];
}
else{
b[k]=a[j++];
}
}
for(k=l;k<=r;++k){
a[k]=b[k];
}
}
inline int sqr(int x){
return x*x;
}
int calc(int l,int r,int k){
int len=r-l+1,s=0;
for(register int i=1;i<=k&&((i<<1)<=len);++i){
s+=sqr(a[l+i-1]-a[r-i+1]);
}
return s;
}
void solve(){
int l,r,p,s,rr,ans=0;
n=read(),
m=read(),
t=read();
for(register int i=1;i<=n;++i){
a[i]=read();
}
l=r=1;
p=1;
while(r<=n){
while(p){
rr=r+p;
sort(a+r+1,a+rr+1);
if(rr>n){
s=t+999;
}
else{
merge(l,rr,r);
s=calc(l,rr,m);
}
if(s<=t){
r=rr;
p<<=1;
}
else{
p>>=1;
}
}
l=r+1;
r=l;
p=1;
++ans;
}
write(ans),
puts("");
}
signed main(){
int casecnt=read();
while(casecnt--){
solve();
}
return 0;
}
WA 了,请问有什么问题?