大佬能不能帮我调调QAQ
我根本没想到分块能超时啊
#include <bits/stdc++.h>
using namespace std;
int a[100005],f[100005];
int m,n,x,t=1,ans[100005],vis[100005],visk[10005],l[100005],fk[100005];
int fkn;
int main() {
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++) {
cin >> a[i];
}
for(int i=n;i>0;i--){
for(int j=1;j<a[i];j++){
while(j+100<a[i]&&j%100==0){
ans[i]+=fk[j/100];
j+=100;
}
ans[i]+=f[j];
}
fk[a[i]/100]++;
f[a[i]]++;
}
ans[n]+=m;
for(int i=n; i>0; i--) {
ans[i-1]+=ans[i]/(n-i+1);
ans[i]%=(n-i+1);
}
for(int i=1; i<=n; i++) {
int to=0,index;
for(int j=1; j<=n; j++) {
bool flag=0;
while(j%100==0 && j+100<=n){
if(to+fk[j/100]<1+ans[i]){
to+=fk[j/100];
j+=100;
}else{
for(int k=j;k<=j+100;k++){
if(!vis[k]){
to++;
}
if(to==ans[i]+1){
cout << k << ' ';
fk[j/100]--;vis[k]=1;flag=1;
break;
}
}
}
}if(flag) break;
to+=f[j];
if(to==1+ans[i]){
printf("%d ",j);
vis[j]=1;
f[j]--;
break;
}
}
}
return 0;
}
我是用的教练的想法,写的分块...