https://www.luogu.org/problemnew/show/P2146 传送门

简单的树链剖分......维护下当前安装了多少个包......修改后查询下就行了......附上极其丑陋的代码......

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

;
int head[N], to[N], v[N], p;
void build(int a, int b) {    v[++ p] = b; to[p] = head[a]; head[a] = p; }

#define mid (l + r >> 1)
], lazy[N << ];

void push_down(int c, int l, int r) {
    if( !lazy[c]) return ;
    lazy[c] --;
    tr[c << ] = (mid - l + ) * lazy[c]; tr[c << |] = (r - mid) * lazy[c];
    lazy[c << ] = lazy[c << |] = lazy[c] + ; lazy[c] = ;
}

void change(int c, int l, int r, int L, int R, int o) {
    if( L <= l && R >= r) {
        tr[c] = (r - l + ) * o; lazy[c] = o + ; return ;
    }
    push_down(c, l, r);
    , l, mid, L, R, o);
    |, mid+, r, L, R, o);
    tr[c] = tr[c << ] + tr[c << |];
}

int get_(int c, int l, int r, int L, int R) {
    if( l == L && R == r) return  tr[c];
    push_down(c, l, r);
    , l, mid, L, R);
    |, mid+, r, L, R);
    , l, mid, L, mid) + get_(c << |, mid+, r, mid+, R);
}

int son[N], si[N];
void search(int u) {
    si[u] = ; son[u] = ;
    for( int i = head[u]; ~i; i = to[i]) {
        search(v[i]), si[u] += si[v[i]];
        if( si[v[i]] > si[son[u]]) son[u] = v[i];
    }
}

int top[N], dfs[N], dfn[N], cnt;
void build_son(int u, int c) {
    top[u] = c; dfs[u] = ++cnt;
    if( son[u]) build_son(son[u], c);
    for( int i = head[u]; ~i; i = to[i])
        if( v[i] != son[u]) build_son(v[i], v[i]);
    dfn[u] = cnt;
}

int n, q, pre[N];
void query(int a) {
    ];
    while( a) {
        change(, , n, dfs[top[a]], dfs[a], ); a = pre[top[a]];
    }printf(] - tcmp);
}

];
int main() {
    scanf(, ;
    ; i <= n; i ++) scanf("%d", pre + i), pre[i] ++ ;
    ; i <= n; i ++) build(pre[i], i);

    search();build_son(, );
    scanf("%d", &q);
    , a; i <= q; i ++) {
        scanf("%s%d", s, &a); a ++;
        ] == 'i') query(a);
        else {
            ]; change(, , n, dfs[a], dfn[a], );
            printf(]);
        }
    }
}

洛谷P2146 [NOI2015]软件包管理器的更多相关文章

  1. 洛谷 P2146 [NOI2015]软件包管理器 解题报告

    P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...

  2. 洛谷 P2146 [NOI2015]软件包管理器 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...

  3. 洛谷 P2146 [NOI2015]软件包管理器 (树链剖分模板题)

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

  4. 洛谷 P2146 [NOI2015]软件包管理器

    真没有想到,这竟然会是一道NOI的原题,听RQY说,这套题是北大出的,北大脑抽认为树剖很难... 只恨没有早学几年OI,只A这一道题也可以出去吹自己一A了NOI原题啊 好了,梦该醒了,我们来看题 以后 ...

  5. 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树

    题目链接:https://www.luogu.org/problem/P2146 本题涉及算法: 树链剖分: 线段树(区间更新及求和,涉及懒惰标记) 然后对于每次 install x ,需要将 x 到 ...

  6. 洛谷 pP2146 [NOI2015]软件包管理器

    题目的传送门 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  7. 洛谷 2146 [NOI2015]软件包管理器

    [题解] 每个软件只依赖另一个软件,且依赖关系不构成环,那么很容易想到这是树形结构. 我们用1表示以安装,用0表示未安装或已卸载:那么安装一个软件,就是把它到树根的路径上所有的点都改为1:卸载一个软件 ...

  8. 题解 P2146 [NOI2015]软件包管理器

    P2146 [NOI2015]软件包管理器 感觉代码比其他题解更简洁qwq 树链剖分模板题 install x:将1~x的路径上的节点全部变成1(安装x需要先安装1~x) uninstall x:将x ...

  9. P2146 [NOI2015]软件包管理器

    题目链接:https://www.luogu.org/problemnew/show/P2146 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...

随机推荐

  1. Github简单的上传和修改

    先自己手动创建一个仓库 echo "# delet" >> README.md git init git add . git commit -m "first ...

  2. PCL 平面模型分割

    点云操作中,平面的分割是经常遇到的问题,下面的例子就是如何利用PCL库提拟合出的参数,之后就可以过滤掉在平面附近的点云. #include <iostream> #include < ...

  3. Hyperledger Fabric1.0 整体结构

    整体结构 Hyperledger Fabric 在 1.0 中,架构已经解耦为三部分: fabric-peer:主要起到 peer 作用,包括 endorser.committer 两种角色: fab ...

  4. 学习Vue.js需要了解的部分内容

    重要: 1.如果要通过js/模板引用 图片到项目,图片路径需要使用require. 2.$event: $event 等于$emit 抛出的值,还可以使用$event.target.value. $e ...

  5. 一步到位带你入门Selenium

    其实,关于这篇文章发布前还是有很多思考的,我是不想发布的,因为关于selenium的文章博客园里面有很多的介绍,写的详细的,也有写的不详细的,那么我的这篇文章的定位是基于selnium从开始到最后的框 ...

  6. MVC5应用程序生命周期lifecycle

  7. Usage of the @ (at) sign in ASP.NET

    from:http://www.mikesdotnetting.com/article/258/usage-of-the-at-sign-in-asp-net Thursday, January 22 ...

  8. css总结2:Flex 布局教程:Flex 语法(转)

    Flex 布局教程:语法篇 网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些 ...

  9. 四则运算(Java) 陈志海 邓宇

    目录 Github项目地址 PSP表格 功能要求 题目 功能(已全部实现) 效能分析 设计实现过程 数值生成 算式生成 问题集生成 设计实现过程 代码说明 测试运行 代码覆盖率 项目小结 Github ...

  10. 观察者(Observer)模式 * 委托事件

    观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象.   这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subje ...