社区讨论

O(n^2)也过了?

P1020[NOIP 1999 提高组] 导弹拦截参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mlopdddt
此快照首次捕获于
2026/02/16 12:57
3 天前
此快照最后确认于
2026/02/16 23:56
3 天前
查看原帖
代码(根据题解思路写的):
CPP
#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

    int n=0,ans=0;
    int arr[100005],sys[100005];
    {
        int k;
        while(cin>>k) arr[n++]=k;
    }
    for(int i=0;i<n;i++)
    {
        if(ans==0||sys[ans-1]>=arr[i])
            sys[ans++]=arr[i];
        else
        {
            int L=0,R=ans-1,mid,find=-1;
            while(L<=R)
            {
                mid=L+((R-L)>>1);
                if(sys[mid]<arr[i])
                {
                    find=mid;
                    R=mid-1;
                }
                else
                    L=mid+1;
            }
            sys[find]=arr[i];
        }
    }
    cout<<ans<<'\n';
    ans=0;
    for(int i=0;i<n;i++)
    {
        int x=0x3f3f3f3f,j_=-1;
        for(int j=0;j<ans;j++)
        {
            if(sys[j]>=arr[i])
            {
                if(x>sys[j])
                {
                    x=sys[j];
                    j_=j;
                }
            }
        }
        if(j_==-1)
            sys[ans++]=arr[i];
        else
            sys[j_]=arr[i];
    }
    cout<<ans<<'\n';
    ans=0;
	return 0;
}
提交记录
两个问我只用二分优化第一个问Hack数据都过了,是数据太水还是因为别的原因?

回复

5 条回复,欢迎继续交流。

正在加载回复...