火出圈了!!!海外粉丝慕名来黑马~

75733fc09d5cbc8c09e72de060cd57cb.gif

嘿,黑马程序员的粉丝宝贝们,如果让你用一个词形容黑马程序员,你会怎么来形容呢?

今天,播妞想用“破圈”来形容黑马程序员。

播妞一直都知道黑马程序员在IT圈比较有知名度,没想到在IT圈之外,我们的知名度也是响当当。在地铁上、小区物业群里,甚至是远在国外,也到处都有黑马程序员的“传说”。

拥挤的地铁

挤不掉程序员学习的热情

在北京上班的同学可能知道,早高峰时段的地铁非常拥挤,不说坐着,站着都需要挤一挤才有地方。就是在这么拥挤的地铁上,有一天,播妞竟然发现一位正在看黑马程序员B站教程的同学,还是位女生,心中除了生出亲切之感外,还感叹咱们程序员是真的爱学习。

c9c8a0703a56a08fc3e925c67138dbb4.png

△ 偶遇黑马粉丝观看黑马教程

小区业主群

也能碰到黑马忠实粉

黑马程序员拥有“每10个学生便有7名来自老学员推荐”的好口碑,不仅来学习过的同学会推荐身边朋友来学习,就连学生的亲戚也非常认可黑马的教学。当有人在校区业主群问计算机培训机构时,黑马程序员往往是被推荐的那一个。这不,小区业主们又被安利了一波。

d43c6088c5caef18550dfb2465ebabd6.png

△ 小区业主群安利黑马程序员

好名声,无国界

黑马程序员就是这么牛

酒香不怕巷子深,黑马程序员15年的教育沉淀,早已在互联网行业中拥有非常大的影响力,但你能想象,这影响力竟然还到了国外,许多身在国外的同学都慕名来黑马程序员咨询课程。

e3473a7010c30b8a950b50f639143b74.png

△ 身在国外的同学慕名来黑马咨询课程

除了上面这几个让播妞感到意外的“圈”之外,黑马程序员也在互联网大厂中留下了好名声,很多大厂HR还主动来黑马程序员招聘。

eb109be741561d96447bae94568c4307.png

△ 华为HR主动来黑马程序员招聘

以上这些虽然出乎播妞的意料,但一切都在情理之中,黑马程序员的“破圈”看似偶然,实则必然。

 出圈原因一黑马程序员实力硬核

黑马程序员更新快、技术全、紧贴企业需求的8大学科课程,均由一线大厂、高学历的技术大牛研发。教研团队中58%的老师来自百度、阿里、华为、腾讯等大厂,不仅具备一线大厂实战经验,能让课程内容紧跟企业需求,还具有更加系统的知识系统,可以让零基础的学生实现一站式学习!

真 • 教研:96 位专职教研技术大牛,879 位严选教学团队,严保教学质量。

真 • 项目:每年投入上亿元研发,覆盖全平台、全业务、场景化的项目库。

真 • 实战:华为、百度等大厂合作,还原真实企业开发环境,学员掌握真实项目开发能力

 出圈原因二:黑马程序员学生众多

从2006年至今,黑马程序员已累计培养30万+高精尖IT开发人才,据调查数据可知,我国IT从业者共计600多万人,平均每20名IT从业者就有1名是黑马程序员所培养!

除了培训的学生之外,我们的免费视频教程累计发布12万余节,总播放量高达上亿次,哔哩哔哩账号中便已拥有170万+粉丝。

149b268e23790a3eb29fdf081ead637f.png

△ 黑马程序员B站账号粉丝

星星之火可以燎原,接触过黑马程序员课程以及免费教程的同学超百万,加上硬实力的加持,拥有一个好口碑实属易事。

 出圈原因三:黑马程序员成果丰硕

大家自愿给身边人安利黑马程序员,除了黑马程序员的硬核实力和长期坚持之外,他们说还因为黑马帮助他们成功入行IT,实现了高薪梦想。

只有自己拿到高薪offer后才更愿意主动介绍给朋友,不然岂不是坑朋友吗?

很多来黑马程序员的同学,也确实是看到身边人拿到高薪offer后,才决定自己来尝试一下的。那黑马程序员的就业情况如何呢?

播妞拿2021一整年黑马程序员就业成绩单给大家举例,黑马的同学不仅均薪破万,而且班级就业薪资和就业率屡创新高,就业天数也缩短到2-3周以内。

1d460a81d74456f9564bb5da2efe97c1.png

骐骥千里非一日之功,黑马程序员的好口碑,是黑马老师们日复一日埋头做教育做出来的,也是我们同学们口口相传积累来的。

虽然这个“破圈”可以让我们骄傲一会会,但我们会继续努力,一如既往的高水准的教学助力学生高薪就业。

如果你想拥有一份高薪互联网工作,不妨来黑马程序员,见识我们的实力,挖掘自己的潜力!

来黑马,拿高薪offer

黑马程序员 8 大热门学科

均在火热开班中

零基础也能学的基础班仅需 28 

部分学科就业班最高可享 2000 元优惠

扫码免费咨询,抢占优惠名额

84a5bcfaf3dd46b7cb5fc4942036834e.png

*线上课程也可扫码咨询

有任何问题均可私聊播妞微信

hmboniu

920400cd5689dee1765db01265077345.png

- 热文推荐 -

程序员发帖引争议!公务员香吗?哪来的优越感?

2022-04-09

4581487c5e2603317ead56317e719ef4.png

北京黑马测试均薪超14K!你的工资及格了吗?

2022-04-08

18885e9ef30ac8bfc6d18d408fd2b7c3.png

2022年第一季度互联网人“混”的怎么样?

2022-04-07

bd49c028f625544c80896a099303539b.png

0714e1a37e4610d3423abf18bed8cf94.gif

题目描述 Karl 是一个热爱烹饪的餐馆板兼厨师,他的餐厅推出了一款特色套餐,吸引了许多慕名前来的食客。为了持续提升顾客的用餐体验,Karl 决定对这份备受欢迎的套餐进行一次革。 Karl 的套餐上有 n 道菜,可以看作一个序列 A,其中第 i 道菜的风味值为 a i ​ 。Karl 的实验革主要有 3 种操作: 1:Karl 想知道目前菜单上菜品的味道波动情况。他使用公式 S(A)=∑ i=2 ∣A∣ ​ ∣a i ​ −a i−1 ​ ∣ (序列里相邻两项菜品味道差的绝对值之和)来计算相邻菜品之间的味道差异。这个值越大,说明菜品之间的风味变化越明显,顾客的体验可能会更丰富。 2 x y:Karl 认为原始序列里的第 x 道菜的味道很怪,希望它对这道菜进行一下升级。于是将它的风味值 a x ​ 修改为值 y 。每次这样的修改,都让他期待着顾客的反馈会有所改善。 3 x:Karl 发现原始序列里的第 x 道菜几乎没有人点。他意识到这道菜并不受欢迎,决定将其从菜单上删除。 Karl 只是一个厨师,所以他找到你来帮助他实现上面的 3 个操作。 输入格式 第一行两个整数 n,m。表示菜品个数和 Karl 的操作次数。 第二行 n 个整数 a i ​ ,表示原始序列里第 i 道菜的味道评分为 a i ​ 。 接下来 m 行,每行行首有一个整数 op,表示操作类型;接下来若干个整数表示操作参数,格式如下: 如果 op=1,表示操作一。 如果 op=2,表示操作二。这一行还有两个整数 x,y,表示将原始序列里第 x 道菜的味道评分修改为 y。 如果 op=3,表示操作三。这一行还有一个整数 x,表示删除原始序列里的第 x 道菜。 输出格式 对于 op=1 的操作,输出一行一个整数表示这个询问的答案。 输入输出样例 输入 #1复制 5 4 2 3 1 7 4 1 3 3 2 5 6 1 输出 #1复制 12 6 输入 #2复制 6 8 235 141 16 98 54 1164 1 3 3 3 4 1 3 1 1 2 2 15 1 输出 #2复制 1455 1291 1197 1149 说明/提示 【样例 1 解释】 操作 1,计算菜品的味道波动,结果为:∣3−2∣+∣1−3∣+∣7−1∣+∣4−7∣=12。 操作 3,将第 3 道菜删去,现存的菜品味道评分从前往后依次为:[2,3,7,4]。 操作 2,将原来序列里的第 5 道菜(现在序列里的第 4 道菜)的味道评分修改为 6 ,现存的菜品味道评分从前往后依次为:[2,3,7,6]。 操作 1,计算菜品的味道波动,结果为:∣3−2∣+∣7−3∣+∣6−7∣=6。 【数据范围】 对于 100% 数据,1≤n,m≤10 6 ,1≤a i ​ ≤10 9 。保证删除和修改一道菜时,这道菜还存在于现有的序列里,保证菜品里至少会有 2 道菜。 测试点编号 n,m 特殊约束 1∼6 n,m≤10 3 无 7∼12 n,m≤10 5 A 13∼20 n,m≤10 6 无 【约束条件】 【A】 删除操作不超过 50 次。
08-23
为了高效处理这个动态序列问题,我们需要支持以下三种操作: 1. **查询相邻菜品风味差的绝对值之和**(即 `S(A)`)。 2. **修改某个菜品的风味值**。 3. **删除某个菜品**。 由于数据量非常大(`n, m ≤ 1e6`),我们需要一个**支持快速修改和查询的数据结构**。 --- ## 解法思路 ### 1. 数据结构选择 使用 `std::list` 来维护动态序列,因为: - 插入/删除操作是 `O(1)`(给定迭代器)。 - 支持双向遍历。 使用 `std::vector<std::list<int>::iterator>` 来维护每个元素在 `list` 中的迭代器,以便快速定位要修改或删除的节点。 ### 2. 维护 `S(A)` 的值 我们维护一个全局变量 `total_diff`,表示当前序列中所有相邻元素差的绝对值之和。在每次修改或删除操作时,只更涉及的相邻差值即可。 --- ## C++ 实现代码 ```cpp #include <iostream> #include <list> #include <vector> #include <cstdlib> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> a(n + 1); // 原始数组,1-indexed for (int i = 1; i <= n; ++i) { cin >> a[i]; } list<int> dishes; // 存储当前菜品风味值 vector<list<int>::iterator> pos(n + 2); // pos[i] 表示第 i 个菜品在 list 中的 iterator // 初始化 list 和 pos for (int i = 1; i <= n; ++i) { pos[i] = dishes.insert(dishes.end(), a[i]); } // 计算初始的 total_diff long long total_diff = 0; auto it = dishes.begin(); auto prev = it++; while (it != dishes.end()) { total_diff += abs(*it - *prev); prev = it++; } // 处理操作 while (m--) { int op; cin >> op; if (op == 1) { cout << total_diff << "\n"; } else if (op == 2) { int x, y; cin >> x >> y; auto it = pos[x]; int old_val = *it; if (it != dishes.begin()) { auto left = prev(it); total_diff -= abs(old_val - *left); total_diff += abs(y - *left); } if (next(it) != dishes.end()) { auto right = next(it); total_diff -= abs(*right - old_val); total_diff += abs(*right - y); } dishes.erase(it); pos[x] = dishes.insert(it, y); } else if (op == 3) { int x; cin >> x; auto it = pos[x]; if (it != dishes.begin() && next(it) != dishes.end()) { auto left = prev(it); auto right = next(it); total_diff -= abs(*it - *left); total_diff -= abs(*right - *it); total_diff += abs(*right - *left); } else if (it == dishes.begin()) { total_diff -= abs(*next(it) - *it); } else if (next(it) == dishes.end()) { total_diff -= abs(*it - *prev(it)); } dishes.erase(it); } } return 0; } ``` --- ## 解释 1. **初始化**: - 使用 `list` 存储菜品风味值。 - 使用 `vector<list<int>::iterator>` 快速访问每个菜品的位置。 2. **操作 1:输出 `S(A)`** - 直接输出 `total_diff`。 3. **操作 2:修改菜品风味值** - 更涉及该菜品的相邻差值。 - 删除旧值,插入值,并更对应位置的 `pos[x]`。 4. **操作 3:删除菜品** - 更该菜品左右邻居之间的差值。 - 删除节点。 5. **时间复杂度**: - 每个操作的时间复杂度为 `O(1)`。 - 总体复杂度为 `O(n + m)`,适用于最大规模。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值