#128. 【NOI2015】软件包管理器

2024-03-02 21:48

本文主要是介绍#128. 【NOI2015】软件包管理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

树链剖分裸题

wa了一发。。。。。 是因为mark数组开小
不把数组开在一起容易开错空间啊

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;#define MAXN 100010int seg[MAXN*4],sum[MAXN*4];
int fa[MAXN],size[MAXN],son[MAXN],top[MAXN],depth[MAXN],loc[MAXN];
int tot,g[MAXN*2],nnext[MAXN*2],num[MAXN*2];
int team[MAXN],head,tail;
int n,q;
void Add(int x,int y)
{tot++;nnext[tot]=g[x];g[x]=tot;num[tot]=y;
}
void Pou()
{   depth[1]=1;team[++tail]=1;while(head<tail){int x=team[++head];for(int i=g[x];i;i=nnext[i]){int tmp=num[i];if(tmp==fa[x]) continue;fa[tmp]=x;team[++tail]=tmp;}}for(int i=n;i>=1;i--){int x=team[i];size[x]=1;for(int j=g[x];j;j=nnext[j]){int tmp=num[j];if(tmp==fa[x]) continue ;size[x]+=size[tmp]; if(size[tmp]>size[son[x]]) son[x]=tmp;}}top[1]=1;loc[1]=1;for(int i=1;i<=n;i++){int x=team[i];int cnt=loc[x];if(son[x]!=0){loc[son[x]]=++cnt;cnt+=size[son[x]]-1;top[son[x]]=top[x];}for(int j=g[x];j;j=nnext[j]){int tmp=num[j];if(loc[tmp]!=0) continue;loc[tmp]=++cnt;cnt+=size[tmp]-1;top[tmp]=tmp;}}
}int mark[MAXN*4];
void Pushdown(int now,int l,int r)
{if(mark[now]==0||l==r) return ;int k=mark[now]-1;mark[now]=0;mark[now*2]=mark[now*2+1]=k+1;int mid=(l+r)/2;seg[now*2]=k*(mid-l+1);seg[now*2+1]=k*(r-(mid+1)+1);
}
void Change(int now,int l,int r,int s,int t,int k)
{if(s<=l&&r<=t){seg[now]=(r-l+1)*k;mark[now]=k+1;return ;}Pushdown(now,l,r);int mid=(l+r)/2;if(s<=mid) Change(now*2,l,mid,s,t,k);if(mid+1<=t) Change(now*2+1,mid+1,r,s,t,k);seg[now]=seg[now*2]+seg[now*2+1];   
}
int Q(int now,int l,int r,int s,int t)
{if(s<=l&&r<=t){return seg[now];}Pushdown(now,l,r);int mid=(l+r)/2,ans=0;if(s<=mid) ans+=Q(now*2,l,mid,s,t);if(mid+1<=t) ans+=Q(now*2+1,mid+1,r,s,t);return ans;
}
int Solve(int x)
{int ans=0;while(top[x]!=1){ans+=(loc[x]-loc[top[x]]+1)-Q(1,1,n,loc[top[x]],loc[x]);Change(1,1,n,loc[top[x]],loc[x],1);x=fa[top[x]];}ans+=(loc[x]-loc[1]+1)-Q(1,1,n,loc[1],loc[x]);Change(1,1,n,loc[1],loc[x],1);return ans;
}
int main()
{cin >>n;for(int i=1;i<n;i++){int x;scanf("%d",&x);Add(i+1,x+1);Add(x+1,i+1);}Pou();cin >>q;while(q--){char s[200];int x;scanf("%s %d",s+1,&x);x++;if(s[1]=='u'){printf("%d\n",Q(1,1,n,loc[x],loc[x]+size[x]-1));Change(1,1,n,loc[x],loc[x]+size[x]-1,0);}else{printf("%d\n",Solve(x));        }}return 0;
} 

这篇关于#128. 【NOI2015】软件包管理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767521

相关文章

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTab

Android SmsManager(短信管理器),发送短信息

AndroidManifest.xml <uses-permission android:name="android.permission.SEND_SMS"/> <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns

Android 电话管理器TelephonyManager,获取网络,SIM卡信息

// 获取系统TelephonyManager对象 TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); AndroidManifest.xml package shortcut.song.com.myapplication;import an

828华为云征文|部署电影收藏管理器 Radarr

828华为云征文|部署电影收藏管理器 Radarr 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 性能模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Radarr3.1 Radarr 介绍3.2 Docker 环境搭建3.3 Radarr 部署3.4 Radarr 使用 四、总结 一、Flexu

随手记(2)-java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

问题描述: 在使用Java连接access数据的.mdb文件时候程序报如下错误 java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序     错误原因: 在win7 office2013下报错 解决方法:  查看Java桥连程序连接字符串是否写成{Microsoft Access Driver (*.m

新型PyPI攻击技术可能导致超2.2万软件包被劫持

一种针对 Python 软件包索引(PyPI)注册表的新型供应链攻击技术已在野外被利用,并且目前正试图渗透到下游组织中。 软件供应链安全公司 JFrog 将其代号定为Revival Hijack,并称这种攻击方法可用于劫持 2.2万个现有 PyPI 软件包,并导致数十万次恶意软件包下载。这些易受攻击的软件包下载量已超过 10 万次,或已活跃超过 6 个月。 JFrog安全研究人员And

[Python]之with与上下文管理器

-python基础知识回顾 with 与上下文管理器 1.1文本操作回顾 # 1、以写的方式打开文件f = open("1.txt", "w")# 2、写入文件内容f.write("hello world")# 3、关闭文件f.close() 文件使用完后必须关闭 因文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的 1.2存在的安全隐患: ① 由于文件