前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >北大荣耀时刻:揭秘蒋神如何征服ICPC世界冠军!

北大荣耀时刻:揭秘蒋神如何征服ICPC世界冠军!

作者头像
小码匠
发布2024-04-25 18:07:53
1370
发布2024-04-25 18:07:53
举报
文章被收录于专栏:小码匠和老码农

蒋神到底有多神

好啦,接下来我们看看蒋神一骑绝尘的战绩。

先看大信科昨天的报道
NOI赛场

高中之后跟银牌无缘,更别说铜牌了,满屏的一等奖和金牌。

AtCoder赛场

世界排名第九,蒋神一般ARC、AGC的比赛都会参加,ABC的比赛参加也比较多。

特别希望蒋神多参加ABC的比赛,原因在下面。

CF

世界排名第十,CF的比赛我关注比较少。

为什么希望蒋神多参加ABC

话题一转:我们还是要回到现实,每个NOI金牌选手之路我们很难去复制,个人天赋、学校环境、家庭认知都不同。

接下来,我们继续聊:为什么希望蒋神多参加ABC。

  • 第一:小码匠经常会参加ABC,题目不会做时,会帮她找题解和参考的代码。 说句发自肺腑的话,很多选手比赛的成绩非常好, 但如果只论代码风格,唯tourist和jiangly两位大佬独领风骚,其他人望尘莫及,这个真不为过,大家可以去翻翻两位大佬以外的代码。
  • 第二:如果大家经常阅读jiang神的代码,跟着蒋神学,尤其STL这块,水平会提高一大截。

建议

孩子们打完比赛,补题或者参考代码的时候,强烈建议多参考蒋神的代码,思路清晰、码风飒飒。

发一段蒋神写的线段树代码。

  • 第一:可以对比自己写的代码;
  • 第二:可以去对比洛谷题解区的代码;

差距不言而瑜。

代码语言:javascript
复制
template<class Info>
struct SegmentTree {
    int n;
    std::vector<Info> info;
    SegmentTree() : n(0) {}
    SegmentTree(int n_, Info v_ = Info()) {
        init(n_, v_);
    }
    template<class T>
    SegmentTree(std::vector<T> init_) {
        init(init_);
    }
    void init(int n_, Info v_ = Info()) {
        init(std::vector(n_, v_));
    }
    template<class T>
    void init(std::vector<T> init_) {
        n = init_.size();
        info.assign(4 << std::__lg(n), Info());
        std::function<void(int, int, int)> build = [&](int p, int l, int r) {
            if (r - l == 1) {
                info[p] = init_[l];
                return;
            }
            int m = (l + r) / 2;
            build(2 * p, l, m);
            build(2 * p + 1, m, r);
            pull(p);
        };
        build(1, 0, n);
    }
    void pull(int p) {
        info[p] = info[2 * p] + info[2 * p + 1];
    }
    void modify(int p, int l, int r, int x, const Info &v) {
        if (r - l == 1) {
            info[p] = v;
            return;
        }
        int m = (l + r) / 2;
        if (x < m) {
            modify(2 * p, l, m, x, v);
        } else {
            modify(2 * p + 1, m, r, x, v);
        }
        pull(p);
    }
    void modify(int p, const Info &v) {
        modify(1, 0, n, p, v);
    }
    Info rangeQuery(int p, int l, int r, int x, int y) {
        if (l >= y || r <= x) {
            return Info();
        }
        if (l >= x && r <= y) {
            return info[p];
        }
        int m = (l + r) / 2;
        return rangeQuery(2 * p, l, m, x, y) + rangeQuery(2 * p + 1, m, r, x, y);
    }
    Info rangeQuery(int l, int r) {
        return rangeQuery(1, 0, n, l, r);
    }
    template<class F>
    int findFirst(int p, int l, int r, int x, int y, F pred) {
        if (l >= y || r <= x || !pred(info[p])) {
            return -1;
        }
        if (r - l == 1) {
            return l;
        }
        int m = (l + r) / 2;
        int res = findFirst(2 * p, l, m, x, y, pred);
        if (res == -1) {
            res = findFirst(2 * p + 1, m, r, x, y, pred);
        }
        return res;
    }
    template<class F>
    int findFirst(int l, int r, F pred) {
        return findFirst(1, 0, n, l, r, pred);
    }
    template<class F>
    int findLast(int p, int l, int r, int x, int y, F pred) {
        if (l >= y || r <= x || !pred(info[p])) {
            return -1;
        }
        if (r - l == 1) {
            return l;
        }
        int m = (l + r) / 2;
        int res = findLast(2 * p + 1, m, r, x, y, pred);
        if (res == -1) {
            res = findLast(2 * p, l, m, x, y, pred);
        }
        return res;
    }
    template<class F>
    int findLast(int l, int r, F pred) {
        return findLast(1, 0, n, l, r, pred);
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 蒋神到底有多神
    • 先看大信科昨天的报道
      • NOI赛场
      • 为什么希望蒋神多参加ABC
      • 建议
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档