学做网站需要什么基础vps服务器中的网站不显示图片
学做网站需要什么基础,vps服务器中的网站不显示图片,网站怎么做竞价,网站划分栏目题目描述
给定一个整数数组 a1,a2,…,ana_1, a_2, \ldots, a_na1,a2,…,an #xff0c;定义其 平滑因子 为#xff1a;最长的连续子数组 ap,…,aqa_p, \ldots, a_qap,…,aq 的长度#xff0c;其中至多存在一个位置 iii #xff08; pi≤qp i \leq qp定义其平滑因子为最长的连续子数组ap,…,aqa_p, \ldots, a_qap,…,aq的长度其中至多存在一个位置iiipi≤qp i \leq qpi≤q满足ai−1aia_{i-1} a_iai−1ai。换句话说该子数组要么是完全非递减的要么只包含一次“下降”。要求对于多个测试用例分别输出每个数组的平滑因子。输入格式多个测试用例每个用例两行。第一行整数nnn1≤n≤1051 \leq n \leq 10^51≤n≤105。第二行nnn个整数a1,…,ana_1, \ldots, a_na1,…,an0≤∣ai∣1080 \leq |a_i| 10^80≤∣ai∣108。输出格式每个测试用例一行输出对应数组的平滑因子。样例输入3 1 2 3 1 0 8 1 2 1 2 1 2 3 1 4 1 -10 -100 -100样例输出3 1 5 3题目分析本题要求寻找满足“至多包含一次下降”的最长连续子数组的长度。这里的“下降”指的是ai−1aia_{i-1} a_iai−1ai。换句话说在子数组中最多只能有一个位置使得前一个元素大于后一个元素。关键点连续性子数组必须是原数组的连续一段。至多一次下降允许000次或111次下降。高效计算nnn最大可达10510^5105需要O(n)O(n)O(n)或O(nlogn)O(n \log n)O(nlogn)的算法。思路推导我们可以将问题转化为一个滑动窗口问题维护一个窗口[left,right][left, right][left,right]。用计数器dropCountdropCountdropCount记录窗口内下降的次数。当dropCount≤1dropCount \leq 1dropCount≤1时窗口有效可以扩展右边界。当dropCount1dropCount 1dropCount1时窗口无效需要移动左边界直到dropCount≤1dropCount \leq 1dropCount≤1。在移动左边界时如果移出的位置原本是一个下降点则dropCountdropCountdropCount需要减111。每次窗口有效时用当前窗口长度更新答案。这样我们通过一次遍历就能找到最长满足条件的子数组。算法步骤初始化left0left 0left0maxLen1maxLen 1maxLen1至少长度为111dropCount0dropCount 0dropCount0。遍历右边界rightrightright从111到n−1n-1n−1判断a[right−1]a[right]a[right-1] a[right]a[right−1]a[right]如果是则dropCountdropCountdropCount加111。当dropCount1dropCount 1dropCount1时若a[left]a[left1]a[left] a[left1]a[left]a[left1]则dropCountdropCountdropCount减111。leftleftleft加111。计算当前窗口长度right−left1right - left 1right−left1更新maxLenmaxLenmaxLen。输出maxLenmaxLenmaxLen。时间复杂度O(n)O(n)O(n)每个元素至多被访问两次。空间复杂度O(1)O(1)O(1)不计输入数组。代码实现// Smooth Factor// UVa ID: 12788// Verdict: Accepted// Submission Date: 2025-12-15// UVa Run Time: 0.010s//// 版权所有C2025邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;while(cinn){vectorinta(n);for(inti0;in;i)cina[i];intleft0,maxLen1;// 至少长度为1intdropCount0;// 窗口中下降的次数for(intright1;rightn;right){// 判断 right 是否为下降点if(a[right-1]a[right])dropCount;// 如果下降次数超过1移动左边界直到满足条件while(dropCount1){// 如果 left 是下降点移出窗口时减少计数if(a[left]a[left1])dropCount--;left;}// 更新最大长度maxLenmax(maxLen,right-left1);}coutmaxLen\n;}return0;}示例分析以样例1 2 1 2 1 2 3 1为例最长满足条件的子数组为1 2 1 2 3长度为555。其中只有一次下降212 121其余位置均非递减。算法过程窗口滑动过程中当遇到第二次下降时例如313 131左边界移动直到窗口中只保留一次下降从而找到最长窗口。总结本题通过滑动窗口维护一个至多包含一次下降的连续子数组在O(n)O(n)O(n)时间内求解。关键在于用dropCountdropCountdropCount记录下降次数并通过移动左边界保持条件成立。代码简洁高效适用于大数据范围。