洛谷P2146 [NOI2015]软件包管理器
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]软件包管理器的更多相关文章
- 洛谷 P2146 [NOI2015]软件包管理器 解题报告
P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...
- 洛谷 P2146 [NOI2015]软件包管理器 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...
- 洛谷 P2146 [NOI2015]软件包管理器 (树链剖分模板题)
题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...
- 洛谷 P2146 [NOI2015]软件包管理器
真没有想到,这竟然会是一道NOI的原题,听RQY说,这套题是北大出的,北大脑抽认为树剖很难... 只恨没有早学几年OI,只A这一道题也可以出去吹自己一A了NOI原题啊 好了,梦该醒了,我们来看题 以后 ...
- 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树
题目链接:https://www.luogu.org/problem/P2146 本题涉及算法: 树链剖分: 线段树(区间更新及求和,涉及懒惰标记) 然后对于每次 install x ,需要将 x 到 ...
- 洛谷 pP2146 [NOI2015]软件包管理器
题目的传送门 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...
- 洛谷 2146 [NOI2015]软件包管理器
[题解] 每个软件只依赖另一个软件,且依赖关系不构成环,那么很容易想到这是树形结构. 我们用1表示以安装,用0表示未安装或已卸载:那么安装一个软件,就是把它到树根的路径上所有的点都改为1:卸载一个软件 ...
- 题解 P2146 [NOI2015]软件包管理器
P2146 [NOI2015]软件包管理器 感觉代码比其他题解更简洁qwq 树链剖分模板题 install x:将1~x的路径上的节点全部变成1(安装x需要先安装1~x) uninstall x:将x ...
- P2146 [NOI2015]软件包管理器
题目链接:https://www.luogu.org/problemnew/show/P2146 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...
随机推荐
- 18-printf(*)的输出格式
#include <bits/stdc++.h> using namespace std; int main(){ for(int i = 0; i < 26; i++){ cout ...
- 设置MongoDB课程环境
Setting Up Your Course Environment This course is designed to be very hands on. Virtually all of the ...
- c语言学习笔记 switch case语句为什么要加break
先来看一个没有break的例子: int main() { int a = 1; switch (a) { case 1: printf("1"); case 2: printf( ...
- mac安装nose,command not found:nosetests
mac通过pip install nose失败,看了一下是权限的问题,重新用sudo pip install nose安装,安装成功. 但是执行nosetests时,提示command not fou ...
- Java String对象面试题分析
- C# 取得内网IP、外网IP、客户端IP方法
前言 在 Windows Form Application 里对于取得 IP Address 有内网.外网两种 IP Address ,如果只需要取得内网 IP Address ,可以透过使用 IPH ...
- FileUtils 文件下载 文件导出
public class FileUtils { /// <summary> /// 文件下载 /// </summary> /// <param name=" ...
- NET上传大文件出现网页无法显示的问题 默认的上传文件大小是4M
需要在配置文件处进行修改 web.config中的<system.web></system.web>内加入如下代码: <httpRuntime executionTime ...
- 苹果微信内置浏览器cookie
苹果微信内置浏览器cookie会被自动清掉,但safari不会清除,原因还未找到,解决方法是把前端把数据通过header传到后台
- 以太坊系列之十一: 零起步使用remix开发智能合约
一步一步使用remix开发智能合约 最新版的remix(2017-8-3)只能使用在线开发了,已经没有离线版本了,并且好像在线版本要FQ才能访问(自行解决). 1.打开remix 注意地址如果是htt ...