来自学长的馈赠7 社论

count

可以发现若能分为 (k) 组当且仅当:

  • (k\mid n) .
  • 每个子树的大小为(k) 的倍数的恰有(\dfrac nk) 个 .

证明可以和 Sakura 交流一下,这边只会感性理解 .

于是直接维护,需要精细实现 .

首先给所有数 (a_i) 减去 (i),于是答案就是最长不下降子序列长度 .

证明大概就是 (a_i-a_j\le i-j\Longleftrightarrow a_i-i\le a_j-j) .

时间复杂度 (O(n\log n)) .

最远点对

线段树维护 dis 最大的两个端点,合并的时候枚举 6 种可能合并 .

LCA 可以树剖做,这样线段树建树大概是 (O(n\log^2n)) .

查询的时候查一下 ([a,b]) 查一下 ([c,d]) 然后 4 种情况讨论即可 .

正确性问 Eafoo .

Code

using namespace std;
typedef long long ll;
typedef double db;
typedef pair pii;
const int N = 123456, LgN = __lg(N), INF = 0x3f3f3f3f;
vector g[N];
inline void addedge(int u, int v, ll w){g[u].emplace_back(make_pair(v, w));}
inline void ade(int u, int v, ll w){addedge(u, v, w); addedge(v, u, w);}
int n, q;
namespace HLD
{
    int fa[N], dep[N], siz[N], son[N], top[N], dfn[N], rnk[N], dis[N], cc;
    void dfs1(int u)
    {
        siz[u] = 1;
        for (auto e : g[u])
        {
            int v = e.first, w = e.second;
            if (fa[u] == v) continue;
            dep[v] = dep[u] + 1; dis[v] = dis[u] + w;
            fa[v] = u;
            dfs1(v);
            siz[u] += siz[v];
            if (!son[u]|| (siz[v] > siz[son[u]])) son[u] = v;
        }
    }
    void dfs2(int u, int t)
    {
        top[u] = t;
        rnk[++cc] = u; dfn[u] = cc;
        if (!son[u]) return ;
        dfs2(son[u], t);
        for (auto e : g[u])
            if ((e.first != son[u]) && (e.first != fa[u])) dfs2(e.first, e.first);
    }
    inline int lca(int u, int v)
    {
        while (top[u] != top[v])
        {
            if (!u || !v) return 0;
            if (dep[top[u]] > dep[top[v]]) u = fa[top[u]];
            else v = fa[top[v]];
        }
        return dep[u] > dep[v] ? v : u;
    }
    inline int dist(int u, int v){return dis[u] + dis[v] - 2 * dis[lca(u, v)];}
}
struct SMT
{
#define ls u << 1
#define rs u << 1 | 1
#define mid ((l + r) >> 1)
    struct Node{int u, l, r, L, R;}tr[N << 2];
    inline static Node merge(const Node& a, const Node& b)
    {
        int p1 = a.L, p2 = a.R, p3 = b.L, p4 = b.R, maxn = 0; Node ans;
        auto _ = [&](int a, int b){int __ = HLD :: dist(a, b); if (__ > maxn){maxn = __; ans.L = a; ans.R = b;}};
        _(p1, p2); _(p1, p3); _(p1, p4); _(p2, p3); _(p2, p4); _(p3, p4);
        return ans;
    }
    inline void pushup(int u){Node _ = merge(tr[ls], tr[rs]); tr[u].L = _.L; tr[u].R = _.R;}
    inline void build(int u, int l, int r)
    {
        tr[u].l = l; tr[u].r = r;
        if (l == r){tr[u].L = tr[u].R = l; return ;}
        build(ls, l, mid); build(rs, mid+1, r);
        pushup(u);
    }
    inline Node query(int u, int L, int R)
    {
        int l = tr[u].l, r = tr[u].r;
        if ((L  mid)) return merge(query(ls, L, R), query(rs, L, R));
        if (L

春节十二响

考虑一条链的情况,我们将 (1) 点左右的左链 (L) 和右链 (R) 排序,只需要贪心的把内存占用排名相同的选上即可,正确性显然 .

于是推广到任意树,对于每个点用一个堆维护一下内存占用,合并即可每次取堆顶弹出,剩余的单算 .

分治,我们只需要把每个子树的答案合并,考虑启发式合并,可以证明时间复杂度为 (O(n\log n)) .

Code

using namespace std;
typedef long long ll;
typedef double db;
typedef pair pii;
const int N = 1e6 + 1;
vector g[N];
inline void addedge(int u, int v){g[u].emplace_back(v);}
inline void ade(int u, int v){addedge(u, v); addedge(v, u);}
int n, a[N];
priority_queue q[N];
vector now;
inline void merge(int x, int y)
{
    if (q[x].size() < q[y].size()) swap(q[x], q[y]);
    while (!q[y].empty())
    {
        now.emplace_back(max(q[x].top(), q[y].top()));
        q[x].pop(); q[y].pop();
    }
    for (auto it = now.rbegin(); it != now.rend(); ++it) q[x].push(*it);
    now.clear();
}
void dfs(int u)
{
    for (int v : g[u]){dfs(v); merge(u, v);}
    q[u].push(a[u]);
}
int main()
{
    scanf("%d", &n);
    for (int i=1; i

Original: https://www.cnblogs.com/CDOI-24374/p/16538863.html
Author: Jijidawang
Title: 来自学长的馈赠7 社论

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584453/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SSM-员工管理项目实战-CRUD-增删改查

    SSM-CRUD 一、项目简介 主界面演示 功能点 分页 数据校验 ajax Rest 风格的 URI 技术点 基础框架 – ssm( Spring + SpringM…

    数据结构和算法 2023年6月7日
    0126
  • 图论基础

    图论基础 1.什么是”图” 这里我们说的图特指图论中的图,图是描述于一组对象的结构,由节点和边组成 比如,这就是一张(无向)图: 当然这其中还有很多分类 比…

    数据结构和算法 2023年6月8日
    0138
  • 2021年第12届蓝桥杯国赛做题记录

    A:带宽:计算200Mbps=?MB/s。常识题,答案200/8=25 先打一个素数表,然后遍历即可。答案1903 bool check(int n): while (m >…

    数据结构和算法 2023年6月12日
    0107
  • C++ 二维数组基础

    二维数组可以看做多个一维数组,但操作起来会方便很多 命名规则与变量一致 我们可使用 “数组名[行][列]” 的方式使用其中每个元素 初始化 可以用以下方式进…

    数据结构和算法 2023年6月8日
    093
  • java多线程之-CAS无锁-常见API

    package com.ldp.demo06Atomic; import java.util.concurrent.atomic.AtomicInteger; /** * @aut…

    数据结构和算法 2023年6月12日
    0114
  • 源码与课件获取

    大家好,我是一名地地道道的码农,平时的工作中喜欢写博客, 一方面可以梳理技术点提升自己的技术,在遇到同样的问题时可以快速解决; 另一方面也想贡献自己的微博力量帮助其他遇到同样问题的…

    数据结构和算法 2023年6月12日
    089
  • 双向链表实现思路

    和单向链表的遍历相同,需要一个辅助节点来保存当前正在遍历的节点 双向链表多出了一个front,所以在添加时,要让新增节点的front指向链表尾节点 和单向链表的修改相同 使用tem…

    数据结构和算法 2023年6月12日
    095
  • 每日代码系列(22)

    1 abstract class MotorVehicles { 2 abstract void brake(); 3 } 4 interface MoneyFare { 5 vo…

    数据结构和算法 2023年6月7日
    0117
  • 「题解」火神之友

    (火神:爷究竟交了些什么冤种……) 原题目链接:link 「我的做题历程」: step1:观察题面。 「他的好朋友风神给他一个有 N 个自然数的数组,然后对…

    数据结构和算法 2023年6月8日
    0119
  • 「codeforces-1720」

    壹 最近 cq 情况很急急,昨天出去排核酸整了两个半小时,十分无语。提前放假自然是一大好事,但是一个人在家也蛮无聊。不要再涨体重了为好,这一年间他妈 delta 了 10 kilo…

    数据结构和算法 2023年6月12日
    0129
  • 线性DP的几种模型和例题

    我们这里来介绍几种常见的模型以及例题: 数字三角形模型 状态表示: f[i]j[j] 表示从顶点走到[i][j]这个点的最大距离; 状态计算:考虑能走到[i][j]这个点的两种方法…

    数据结构和算法 2023年6月7日
    0102
  • 线性DP——子序列问题浅谈

    很多人都不理解为什么可以用 f i 表示一个最长上升子序列大小? 那么我们可以看一下这个”上升”二字这才是这种类型问题的重点——上升要求的是什么? 不就是单…

    数据结构和算法 2023年6月7日
    0110
  • 使用EventSystem判断是否点击ui

    private PointerEventData _uiPointerEventData; private List _uiRaycastResultCache = new Lis…

    数据结构和算法 2023年6月7日
    0114
  • 【题解】[JSOI2010]冷冻波

    题目描述 WJJ喜欢”魔兽争霸”这个游戏。在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵。我们认为,巫妖和小精灵都可以…

    数据结构和算法 2023年6月12日
    0106
  • 分布式ID生成方案

    分布式ID策略 为什么要用分布式ID? 在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个 MySQL 主从同步读写分离也能对付。 但随着数据日渐增长,主从…

    数据结构和算法 2023年6月8日
    0140
  • CF1467C Three Bags

    传送门 思路:对于一般情况,我们有三个袋子,容易想到把袋子里物品的价值排序。然后贪心,我们想让最后的价值最大,则三个袋子最后都可以剩余一个物品,这三个物品总和需要最大,最好的情况就…

    数据结构和算法 2023年6月7日
    0135
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球