P1020 [NOIP1999 提高组] 导弹拦截

发布时间:2024年01月22日

网址如下:

P1020 [NOIP1999 提高组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

怪,实在是怪

怎么会出现在自家电脑运行时间无限接近于0,在洛谷测试的时候超时的情况

在洛谷的o2优化中,是说我的数组访问越界了

但是看不出来哪里有

测试点1的运行时间:

最下面的,接近于0

在洛谷上的:

代码如下:

#include<stdio.h>
#include<ctype.h>
void scanf_line(void);
int dic(int l, int u, int hi);
int dic_2(int l, int u, int hi);
int dp[100001], f[100001], num[100001], g[100001];
int len, maxn = 1, minn = 1;

int main(void)
{
    //输入
    scanf_line();
    //求最长不递增子序列
    f[1] = g[1] = num[1];
    for(int i = 2; i <= len; i++)
    {
        //二分法求fx最逼近hi时的x,更新dp以及f,maxn
            //初始时的意外情况
            if(f[1] <= num[i])  dp[i] = 1, f[1] = num[i];
            else if(f[maxn] >= num[i])dp[i] = ++maxn, f[maxn] = num[i];
            //正常情况
            else
            {
                dp[i] = dic(1, maxn, num[i]) + 1;
                f[dp[i]] = num[i];
            }
        //二分法求此时的minn值并更新g
            //初始时的意外情况
            if(g[1] > num[i])  g[1] = num[i];
            else if(g[minn] < num[i])  g[++minn] = num[i];
            //正常情况
            else  g[dic_2(1, minn, num[i])] = num[i];
    }
    //输出
    printf("%d\n%d", maxn, minn);

    return 0;
}
void scanf_line(void)
{
    int ext = 0;
    for(char c; (c = getchar()) != '\n'; )
        if(isdigit(c))
            ext = ext * 10 + c - '0';
        else
            num[++len] = ext, ext = 0;
    num[++len] = ext;
    return;
}
int dic(int l, int u, int hi)
{
    if(u - l <= 1)  return l;

    int mid = (l + u) / 2;
    if(f[mid] < hi)  return dic(l, mid, hi);
    else if(f[mid] > hi)  return dic(mid, u, hi);
    else  return mid;
}
int dic_2(int l, int u, int hi)
{
    if(u - l <= 1)  return u;

    int mid = (l + u) / 2;
    if(g[mid] < hi)  return dic_2(mid, u, hi);
    else if(g[mid] > hi)  return dic_2(l, mid, hi);
    else  return mid;
}

参考的题解:

题解 P1020 【[NOIP1999 普及组] 导弹拦截】 - 古明地觉世界第一! - 洛谷博客 (luogu.com.cn)

文章来源:https://blog.csdn.net/Fool256353/article/details/135745033
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。