220726 T3 最优化问题 (树状数组)
题目描述
在同学们的努力下, 高匀感受到了 alb 的快乐。
高勺意犹未尽,找来了一个长度为 nn 的序列 a_1,a_2,….,a_na1,a2,….,an 。
她想要删除这个序列中的 kk 个数,然后将剩下的数按下标从小到大排列成一个长度为 n-kn−k 的序列 b_1,b_2,...,b_{n-k}b1,b2,...,bn−k。
高勺定义她的快乐度为 bb 序列中满足 b_i=ibi=i 的数量,即 \sum_{i=1}^{n-k} [b_i=i]∑i=1n−k[bi=i] 。
高勺想知道她的快乐度的最大值为多少。
输入格式
第一行两个整数 n,k,n,k,表示序列的长度和删掉数的个数。
第二行 nn 个整数 a_iai,表示杰哥的序列。
输出格式
输出一个整数,表示 \sum_{i=1}^{n-k} [b_i=i]∑i=1n−k[bi=i] 的最大值
DP暴力的话可以得40~50分。考虑正解:
对于一个数ai+x=i,只有当他前面的数删去x过后才会产生1的贡献,我们将原数列按照数值递增,数值相等时位置递减排序,用c[x]维护删去x个数的最大贡献,加入一个数ax,他要产生贡献的话要删去x-ax个数,查询前缀的最大值并由此转移,我们需要一个单点修改和查询前缀max的数据结构,所以用树状数组。
1 #include <bits/stdc++.h>
2 #define N 500005
3 #define fi first
4 #define se second
5 #define pi pair<int, int>
6 //#define loveGsy
7 using namespace std;
8 int a[N], n, k, ans, c[N];
9 pair<int, int> b[N];
10 void add(int x, int v) {
11 x++;
12 for (; x <= n; x += x & (-x)) c[x] = max(c[x], v);
13 }
14 int query(int x) {
15 x++;
16 int s = 0;
17 for (; x; x -= x & (-x)) s = max(s, c[x]);
18 return s;
19 }
20 void solve(int x) {
21 if (a[x] > x) return ;
22 int res = query(x - a[x]) + 1;//从前缀转移
23 add(x - a[x], res);
24 if (x - a[x] <= k && a[x] <= n - k) ans = max(ans, res);
25 }
26 bool cmp(pi a, pi b) {
27 return (a.fi ^ b.fi) ? a.fi < b.fi : a.se > b.se;
28 }
29 int main() {
30 #ifdef loveGsy
31 freopen("tree.in", "r", stdin);
32 freopen("tree.out", "w", stdout);
33 #endif
34 scanf("%d %d", &n, &k);
35 for (int i = 1; i <= n; i++) {
36 scanf("%d", a + i);
37 b[i] = make_pair(a[i], i);
38 }
39 sort(b + 1, b + n + 1, cmp);
40 for (int i = 1; i <= n; i++) solve(b[i].second);
41 printf("%d\n", ans);
42 return 0;
43 }
220726 T3 最优化问题 (树状数组)的更多相关文章
- 2016 10 28考试 dp 乱搞 树状数组
2016 10 28 考试 时间 7:50 AM to 11:15 AM 下载链接: 试题 考试包 这次考试对自己的表现非常不满意!! T1看出来是dp题目,但是在考试过程中并没有推出转移方程,考虑了 ...
- 模拟赛 T3 DFS序+树状数组+树链的并+点权/边权技巧
题意:给定一颗树,有 $m$ 次操作. 操作 0 :向集合 $S$ 中加入一条路径 $(p,q)$,权值为 $v$ 操作 1 :给定一个点集 $T$,求 $T$ 的并集与 $S$ 中路径含交集的权和. ...
- 【树状数组】BZOJ3132 上帝造题的七分钟
3132: 上帝造题的七分钟 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1004 Solved: 445[Submit][Status][Dis ...
- Gym102082 G-What Goes Up Must Come Down(树状数组)
Several cards with numbers printed on them are lined up on the table. We’d like to change their orde ...
- 2018牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组)
题意 给出一串数字以及q次查询,每次查询l,r],要求求出[1,l]和[r,n]的所有不相同的数字个数. 分析 先对数组进行倍增,变为两倍长,然后查询就变成一个完整的区间.离线处理,按r从小到大排序, ...
- hdu5293 lca+dp+树状数组+时间戳
题意是给了 n 个点的树,会有m条链条 链接两个点,计算出他们没有公共点的最大价值, 公共点时这样计算的只要在他们 lca 这条链上有公共点的就说明他们相交 dp[i]为这个点包含的子树所能得到的最 ...
- 洛谷P3368 树状数组2 树状数组+差分
正解:树状数组+差分 解题报告: 戳我! 不得不说灵巧真滴是越来越弱了...连模板题都要放上来了QAQ 因为今天考试的T3正解要用到树状数组这才惊觉树状数组掌握得太太太太差了...之前一直靠线段树续着 ...
- 二维树状数组+差分【p4514】上帝造题的七分钟
Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\times m\)矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右 ...
- 【bzoj4889】[Tjoi2017]不勤劳的图书管理员 树状数组+分块+二分
题目描述(转自洛谷) 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生这两本书页数的和的厌烦度.现在有n本被打 ...
随机推荐
- 6.4.2 用BFS求最短路
前面的篇幅占了太多,再次新开一章,讲述BFS求最短路的问题 注意此时DFS就没有BFS好用了,因为DFS更适合求全部解,而BFS适合求最优解 这边再次提醒拓扑变换的思想在图形辨认中的重要作用,需要找寻 ...
- 我也是醉了,Eureka 延迟注册还有这个坑!
Eureka 有个延迟注册的功能,也就是在服务启动成功之后不立刻注册到 Eureka Server,而是延迟一段时间再去注册,这样做的主要目的是因为虽然服务启动成功了,可能还有一些框架或者业务的代码没 ...
- go更新腾讯云DNSPod的解析记录
纯粹练手用的,大家轻喷 获取SecretId,SecretKey 打开腾讯云,登录之后打开https://console.cloud.tencent.com/cam/capi,然后新建密钥记录生成的S ...
- python 参数类型理解
简介 大家都知道,在java中,函数或者方法的参数在调用时必须对其进行传参操作,也就是所谓的必选参数,也可以称为位置参数,除此之外,python还拥有其他语言不具有的一些参数类型,以下将进行一一介绍. ...
- 如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
本节主要记录使用wandb记录训练曲线以及上传一些格式的数据将其展示在wandb中以便分析的方法,略过注册安装部分(可使用pip intall wandb安装,注册相关issue可上网搜索),文章着重 ...
- C#里如何简单的校验时间格式
前言: 晚上打算睡觉的时候,群里反馈订单接收失败,开工排查问题,日志显示验签失败,发现一个蛮有意思的BUG,总算有了一个写作的素材 场景描述 本次的场景属于比较常见的收单API,对第三方的订单进行签名 ...
- 【Java面试】这道互联网高频面试题难住了80%的程序员?索引什么时候失效?
"索引什么时候失效?" 面试过程中,突如其来的一个问题,是不是有点懵? 没关系,关注我,面试不迷路. 我是Mic,一个工作了14年的Java程序员. 索引失效涉及到的知识点非常多, ...
- linux-0.11分析:boot文件 setup.s 第二篇随笔
boot文件 setup.s 第二篇随笔 参考 [github这个博主的][ https://github.com/sunym1993/flash-linux0.11-talk ] 中断获取光标的位置 ...
- Apache DolphinScheduler 使用文档(2-3/8):集群规划及环境准备
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 2. 集群规划 2.1 集群配置 2.2 软件版本 2 ...
- pnpm 的 workspace 实现 monorepo 工程
前言 前端多个包管理的的方式一般都是采用monorepo的方式去管理,之前都是使用的lerna的workspace去管理.这段时间包管理切换到了pnpm上,它也有worksapce,可以支持monor ...