TLE on #4求助!
查看原帖
TLE on #4求助!
795344
lfxxx_楼主2024/4/7 11:24
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int tr[N];
int n,m,k;
void add(int x,int d)
{
    for(int i=x;i<=m;i+=i&-i)
        tr[i]+=d;
}
int query(int x)
{
    int res=0;
    for(int i=x;i;i-=i&-i)   
        res+=tr[i];
    return res;
}
bool check(int mid)
{
    int cnt=0,bl=1,l=1;
    for(int i=1;i<=n;++i)
    {
        int cur=i-l-query(a[i]);
        if(cnt+cur>mid)
        {
            ++bl;
            cnt=0;
            for(int j=l;j<i;++j)
                add(a[j],-1);
            l=i;
        }
        else cnt+=cur;
        add(a[i],1);
    }
    for(int i=l;i<=n;++i)
        add(a[i],-1);
    return bl<=k;
}
int b[N];
void solve()
{
    cin>>n>>k;
    for(int i=1;i<=n;++i)
        cin>>a[i],b[i]=a[i];
    sort(b+1,b+n+1);
    m=unique(b+1,b+n+1)-b-1;
    for(int i=1;i<=n;++i) 
        a[i]=lower_bound(b+1,b+m+1,a[i])-b;
    int l=-1,r=n*n+1;
    while(l+1<r)
    {
        int mid=l+r>>1;
        if(check(mid))
            r=mid;
        else
            l=mid;
    }
    cout<<r<<'\n';
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); 
    int T;
    for(cin>>T;T;--T)
        solve();
}
2024/4/7 11:24
加载中...