没什么好说的,就是打标记的树剖

但是:一定要注意标记下传的优先级!!!!!!!!!别导致同时下传两个标记!!

#include<iostream>
#include<cstdio>
using namespace std;
#include<vector>
#define zuo now<<1,l,mid
#define you now<<1|1,mid+1,r
#define N 100001
vector<int>v[N];
int tot,dui[N],fu[N],size[N],hson[N],top[N],b1[N<<2],b2[N<<2],zhi[N<<2],a,b,daan,n,i,x,t;
string ch;void dfs1(int now,int fa)
{
//  shen[now]=d;fu[now]=fa;size[now]=1;for(int i=0;i<v[now].size();i++){int nd=v[now][i];if(nd==fa)continue;//cout<<now<<" "<<nd<<endl;dfs1(nd,now);size[now]+=size[nd];if(size[hson[now]]<size[nd])hson[now]=nd;}//cout<<now<<" "<<hson[now]<<endl;}void dfs2(int now,int top2)
{top[now]=top2;//dui[now]=++tot;//if(size[hson[now]])dfs2(hson[now],top2);for(int i=0;i<v[now].size();i++){int nd=v[now][i];if(nd==fu[now]||nd==hson[now])continue;dfs2(nd,nd);}
}void down(int now,int l,int r)
{if(l!=r){if(b1[now]){zhi[now<<1]=((l+r)>>1)-l+1;zhi[now<<1|1]=r-(((l+r)>>1)+1)+1;b1[now<<1]=1;b1[now<<1|1]=1;b2[now<<1]=0;b2[now<<1|1]=0;}if(b2[now]){zhi[now<<1]=0;zhi[now<<1|1]=0;b2[now<<1]=1;b2[now<<1|1]=1;}}b1[now]=0;b2[now]=0;}void up(int now)
{zhi[now]=zhi[now<<1]+zhi[now<<1|1];
}void zh(int now,int l,int r)
{down(now,l,r); if(l>=a&&r<=b){daan+=r-l+1-zhi[now];if(zhi[now]==r-l+1)   return; zhi[now]=r-l+1;b1[now]=1;b2[now]=0;return;}int mid=(r+l)>>1;if(a<=mid)zh(zuo);if(b>mid)zh(you);up(now);}void ji(int now,int l,int r)
{down(now,l,r); if(l>=a&&r<=b){daan+=zhi[now];if(zhi[now]==0)return;zhi[now]=0;b1[now]=0;b2[now]=1;return;   }int mid=(r+l)>>1;if(a<=mid)ji(zuo);if(b>mid)ji(you);up(now);
}void work(int now)
{   while(1){a=dui[top[now]];b=dui[now];zh(1,1,n);now=fu[top[now]];  //cout<<a<<" "<<b<<"PP";if(a==1)return;}  }int main()
{  // freopen("shu.in","r",stdin);// freopen("shu.out","w",stdout);scanf("%d",&n);for(i=0;i<=n;i++)hson[i]=n+8;for(i=1;i<n;i++){scanf("%d",&x);v[x].push_back(i);        }dfs1(0,0);//cout<<"ppp";dfs2(0,0);//   for(i=0;i<n;i++)
//  cout<<hson[i]<<"  ";
//  cout<<endl;scanf("%d",&t);while(t){cin>>ch;scanf("%d",&x);if(ch=="install"){ // cout<<"ppp";daan=0;work(x);//  zh(1,1,n);}else {a=dui[x],b=dui[x]+size[x]-1;//cout<<a<<" "<<b;daan=0;ji(1,1,n);}printf("%d\n",daan);--t;}}

2017.3.14 软件包管理器 思考记录相关推荐

  1. 2017.9.14 棘手的操作 思考记录

    mdzz,手残没法治 一开始想按编号顺序用splay维护最值,但没法查找 然后想用线段树启发式合并,然而空间会爆 由于连接之后的连通块顺序没有关系,所以可以考虑并查集来表示区间,然后就可以用线段树维护 ...

  2. 2017.3.14 不重复数字 思考记录

    其实,这是一个stl入门题       map水过 #include<iostream> #include<cstdio> using namespace std; #incl ...

  3. 【NOI2015】软件包管理器

    NOI难得的水题,话说还是T2诶--又学到了线段树的一种新的魔性使用 看sxysxy大神的代码才写出来的,sxysxy_orz 原题: Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包 ...

  4. Linux命令之 DNF -- 新一代的 RPM 软件包管理器

    文章目录 一.命令介绍 二.安装 DNF 三.DNF 命令 (一)主要命令 1. 安装.升级和删除软件包 2. 查询和检查软件包 3. 执行其它功能 (二)插件命令 四.选项参数 五.命令示例 (一) ...

  5. bzoj4196:[Noi2015]软件包管理器

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

  6. [NOI2015]软件包管理器

    4621 [NOI2015]软件包管理器  题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行 ...

  7. 怎么理解ubuntu中的软件包管理器apt和dpkg

    大家都知道在ubuntu下,安装软件经常会用到一个命令就是"apt-get install",这里的apt命令,其实是linux系统下一个通用的软件包管理器,使用该命令可以很方便的 ...

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

    P2146 [NOI2015] 软件包管理器 题意: 如果软件包 a 依赖软件包 b,那么安装软件包 a 以前,必须先安装软件包 b.同时,如果想要卸载软件包 b,则必须卸载软件包 a. 软件包之间存 ...

  9. Linux 命令之 yum -- 基于 RPM 的软件包管理器

    文章目录 一.命令介绍 二.选项参数 选项 参数 三.配置文件 四.参考示例 (一)安装.升级和删除包 安装指定的软件包 强制重新安装 本地安装指定软件包 本地更新指定软件包 安装 yum 服务器中的 ...

最新文章

  1. Java对象析构_c++之对象构造顺序和销毁(析构函数)
  2. pythonwhile循环怎么修改数据类型_python基础--数据类型循环
  3. ZooKeeper集群与Leader选举
  4. win10缺少 `VCRUNTIME140.dll` 文件(解决篇)
  5. 第一次作业:读优秀博文有感
  6. BUPT复试专题—C翻转(2010)
  7. Xshell 常见问题及相关配置
  8. Spring概况(一)
  9. python编程视频剪辑_MoviePy常用剪辑类及Python视频剪辑自动化
  10. 液晶手写板原理拆解_天猫babycare儿童液晶手写板详情页拆解
  11. 防火墙文件打印共享服务器,防火墙 网络打印机共享服务器
  12. 异步4月新书,送出一本你爱的!
  13. Java程序员秋招面经大合集
  14. 打造百亿量级、亿级日活SDK的十大关键要点
  15. 雷电2接口_中国连城 | 总结关于USB、TypeC、雷电接口的冷知识
  16. CSS Naked Day(CSS裸奔节)
  17. [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  18. 什么是 robotc?
  19. GPS_GPS基本原理和常识
  20. 关于逻辑删除字段的处理

热门文章

  1. Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
  2. 优达学城深度学习之七——TensorFlow卷积神经网络
  3. 【springboot】application.yml配置文件中数据库密码password加密后显示
  4. 【word基础知识】word转pdf时出现空白页如何删除?
  5. 2_less中的数值运算
  6. 2个网卡配置相同ip 华为交换机_【跟着做】华为网络设备配置
  7. properties类_受不了springboot的yml和properties配置,我扩展出了groovy配置
  8. 8s pod 查看 的yaml_k8s之深入解剖Pod(三)
  9. linux 监控java内存_Linux下实用的JAVA内存泄露监控命令及工具
  10. WARNING: IPv4 forwarding is disabled. Networking will not work.解决方法