zoukankan      html  css  js  c++  java
  • csp-s模拟99

    考前10天了。。。

    昨天晚上真的不清醒,什么也码不对,心态爆炸。

    T1调了一个多小时没出来,T2因为少了一出q.pop()没A掉,T3随便写了几个sort竟然A了。十分懵逼。

    最后20分钟想调T1,结果也没打完。

    T1:

      每次的修改是独立的,求修改后的上升序列长度(最靠前上升序列)。

      预处理$f[i]$表示从开头到$i$的上升序列长度,就是截至$i$的答案。$g[i]$表示从$i$开始至结尾的答案。$f[i]$直接递推,顺便记录前缀最大值$ma[i]$。$g[i]$可以用单调栈处理。

      每次修改对于$pos$前面的点没有影响,承接$pos-1$处的答案。对于$pos$以后,找到第一个值比$max(ma[pos-1],H)$大的位置$p$,答案加上$g[p]$。

      将询问离线,按$H$递减排序,按顺序把序列大于$H$的插入$set$维护,这样就可以$lower \_ bound$了。复杂度$O(N* log N)$。

    T2:

      由于原材料的购买数量、存储数量都不限制没,所以对于每一个月,如果$c[i]+r[i]<c[i+1]$,直接把$c[i+1]$替换为$c[i]+r[i]$。这样每个月新制造一台电脑的总花费就是$c[i]+m[i]$。

      考虑如何最小费用地得到$p$台电脑。电脑来源有两个:上月存储,本月新造。用小根堆维护上月储存的电脑的价格,每次从堆顶和本月新制造花费中选较小。若两者总量小于需求量,则无法满足。在完成每个月需求后,不断选原堆顶花费与新制造花费中较小的,再加上存储费压入新堆,直到达到仓库容量上限或本月不剩余。

      暴力弹堆可能会被卡成$O(K*E* log E)$,然而数据并没有刻意去卡。

    T3:

      瞎排序、随机化都能A。正解是把牌按$a$升/降排序,然后两个为一组,选每组$b$较大的。感觉很乱搞的样子。

  • 相关阅读:
    简单播放器(增加sdl事件控制)
    注册表读写
    vb6 的关机代码
    设置系统时间
    获取屏幕工作区、定位任务栏、窗口置顶
    用WINSOCK API实现同步非阻塞方式的网络通讯
    使用API调用外部程序并监控程序状态
    vba截屏保存
    StrConv 内码转换
    阻止文本框获取键盘输入
  • 原文地址:https://www.cnblogs.com/Duan-Yue/p/11790305.html
Copyright © 2011-2022 走看看