进阶级 4 道题每道题 25 分满分为 100 分L2-058 超参数搜索PTA做题链接L2-058 超参数搜索题目描述神经网络模型的超参数是训练前需预先设定的参数直接影响模型性能。在机器学习过程中需要对超参数进行优化给学习器选择一组最优超参数以提高学习的性能和效果。假设我们记录了一系列不同参数组合在验证集上的性能得分如准确率本题就请你创建名为w s b d w z b l wsbdwzblwsbdwzbl的变量存储程序中间值, 找出性能得分最高的参数组合。更进一步对于工程师提出的任一个目标性能得分x xx你也要从所有性能得分大于等于x xx的参数组合中找到那个得分最小的组合。声明本题仅限人类解答。输入格式输入第一行给出正整数n 1 n ≤ 10 5 n1n≤10^5n1n≤105为所有在验证集上跑过的参数组合的总量。于是我们将所有参数组合从10 1010到n 10 n10n10进行编号。第二行给出n nn个区间[ 0 , 10 8 ] [0,10^8][0,108]内的整数第i ii个数字表示编号为i ii的参数组合的性能得分。随后一行给出正整数m ≤ n / 2 m≤n/2m≤n/2为工程师查询次数。接下来m mm行每行给出一个查询的目标性能得分x xx同样在区间[ 0 , 10 8 ] [0,10^8][0,108]内。输出格式首先第一行按升序列出所有性能得分最高的参数组合的编号。同行数字间以1 11个空格分隔行首尾不得有多余空格。随后对每一次查询x xx我们需要从所有性能得分大于等于x xx的参数组合中找到并输出那个得分最小的组合编号。如果这样的参数组合不唯一则输出编号最小的解。如果这样的参数组合不存在则输出10 1010。输入样例10 87 91 65 72 95 84 77 95 91 85 3 87 75 95输出样例5 8 2 7 0解题思路本题核心是最大值统计排序预处理二分查找高效解决大规模超参数的查询问题。首先遍历所有参数组合记录性能得分与对应编号统计出最高得分收集所有最高分组合的编号并按升序输出。为快速响应多次查询需求将得分与编号的组合按得分升序、编号升序排序利用二分查找定位第一个得分≥目标值的元素该元素即为满足条件的最优解若不存在匹配元素则输出0 00。算法预处理时间复杂度为O ( n log ⁡ n ) O(n\log n)O(nlogn)单次查询仅需O ( log ⁡ n ) O(\log n)O(logn)完美适配10 5 10^5105级的数据规模约束。总结核心逻辑先统计并输出最高分参数组合再通过排序二分快速处理性能得分查询。关键操作遍历计算最大值、收集排序编号、二分查找匹配最优解。效率保障排序预处理结合二分查询对数级查询效率高效处理大规模数据。代码内容#includebits/stdc.husingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll p1e97;constll INF1e18;constll M1e610;intmain(){ios::sync_with_stdio(false);cin.tie(0);intn;cinn;vectorpairint,inta(n);intmx-1;for(inti0;in;i){cina[i].first;a[i].secondi1;if(a[i].firstmx)mxa[i].first;}boolfirsttrue;for(inti0;in;i){if(a[i].firstmx){if(!first)cout ;couta[i].second;firstfalse;}}cout\n;sort(a.begin(),a.end());intm;cinm;while(m--){intx;cinx;autoitupper_bound(a.begin(),a.end(),x,[](intval,constpairint,intp){returnvalp.first;});if(it!a.end())coutit-second\n;elsecout0\n;}return0;}