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. 使用GDB调试PHP代码,解决PHP代码死循环

    最近在帮同事解决Swoole Server问题时,发现有1个worker进程一直处于R的状态,而且CPU耗时非常高.初步断定是PHP代码中发生死循环. 下面通过一段代码展示如何解决PHP死循环问题. ...

  2. Python学习笔记_我的参考网址

    Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...

  3. 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看

    ThreadLocal(线程变量副本)       --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...

  4. Apache htcacheclean命令

    一.简介 htcacheclean可以用于将mod_disk_cache的磁盘缓冲区占用的空间保持在一个合理的水平.这个工具可以手动运行也可以作为后台守护进程运行.当作为守护进程运行的时候,它将每隔一 ...

  5. Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond

    感觉应当挺简单的,但是弄了好久……菜死了 如果不考虑那些为$1$的点,直接跑个最短路计数就好了,但是我们现在有一些边可以不用付出代价,那么只要在连边的时候先预处理搜一下就好了. 原来的想法是拆点,但是 ...

  6. (转)ASP.NET MVC4+EasyUI+EntityFrameWork权限管理系统——数据库的设计(一)

    原文地址:http://www.cnblogs.com/cmsdn/p/3371576.html 快一年没写博客了,这段时间感觉好迷茫,写点博客,记录一下自己的成长过程,希望对大家也有帮助 先上图 一 ...

  7. (转)自制AutoMapper实现DTO到持久层Entity的转换

    原文地址:http://www.cnblogs.com/qidian10/p/3173907.html 项目中经常涉及到页面DTO更新,保存到数据库的操作,这就必然牵扯到DTO和持久层对象的转换,常见 ...

  8. C++ 虚基类 派生与继承

    在学习设计模式时我就有一个疑问,关联和继承除了用法上的区别,好像在内存上并没有什么区别,继承也是父类作为了子类的元素(内存上),关联也是这样.而且关联好像更占内存一些.这就是设计模式里问题了“依赖倒转 ...

  9. MongoDB整理笔记の体系架构

    MongoDB 是一个可移植的数据库,它在流行的每一个平台上都可以使用,即所谓的跨平台特性. 一个运行着的MongoDB 数据库就可以看成是一个MongoDB Server,该Server 由实例和数 ...

  10. c# 求数组的最大值

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...