CF314A 题解
前言
这翻译明显错误,建议大家去原题面看。
简要题意
有一个序列
将
思路
我们想让
这一点还是比较容易的,把
也就是说,我们可以计算:
这样,对于删除操作,我们就不必重新计算榜单了,如果删除掉
那么代码就十分容易了,直接模拟就行。时间复杂度显然是
实际可以直接用一个变量代替
完整代码
/*为了代码更通俗,使用了不关同步的 cin 与 cout。不保证在输入输出上会被卡常。*/
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n, k, nowi = 0; //nowi是真正的i
cin >> n >> k;
long long d = 0; //由于每个di可以承接地算,所以直接扫一遍即可。删除就是不计算i的贡献入内
for (int i = 1; i <= n; i++)
{
nowi++;
int ai; cin >> ai;
if (d - 1ll * (i - 1) * (n - i) * ai < k) {write(nowi), endl; n--, i--;}
else d += 1ll * ai * (i - 1);
}
return 0;
}
希望能帮助到大家!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)