Description


恶梦是学校里面的学生会主席。他今天非常的兴奋,因为学校一年一度的学生节开始啦!!
在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演。其中第i个节目的表演时间为第i个单位时间,表演的舞台为Ai,注意可能有多个节目使用同一个舞台。
作为恶梦的忠实粉丝之一的肥佬,当然要来逛一下啦,顺便看一下能不能要到恶梦的签名。
肥佬一开始会先在A1 看完节目1再去闲逛。
肥佬可以在舞台之间随便乱走。但是假如肥佬当前在看第i个节目,站在第Ai个舞台前面的话,由于有些道路被封锁了,所以肥佬下一步只能前往第Li到第Ri个舞台中的一个。并且当一个节目结束的时候,肥佬只能去看另外一个节目,或者结束自己的闲逛。
具体而言就是说,假设肥佬可以从第i个节目走去第j个节目,那么当且仅当i<j且Li <= Aj <= Ri。
但事实上是,恶梦非常讨厌被自己的粉丝跟踪。所以他想在只封锁掉一个节目的情况下,使得肥佬不能到达自己所在的地方。并且为了防止意外,他还想知道有多少个这样的节目。
简而言之,恶梦想知道对于任意一个节目p∈[1,N],有多少个节目t,使得删掉t之后,不存在一条从节目1出发到节目p的路径。注意,节目1和节目p也是可以被删的。
由于他非常的忙碌,所以他把这个任务交给了你。

对于15%的数据,N <= 100
对于30%的数据,N <= 800
对于50%的数据,N <= 5000
对于70%的数据,N <= 10000
对于100%的数据,N <= 50000

Solution


70p暴力连边跑拓扑排序+LCA求支配树,还要啥自行车(滑稽

由于每次连的都是一整段区间,我们考虑线段树优化建图。我们从大到小插入a建n棵线段树,每个节点向儿子分别连边,每个节目向可行节点连边,每个节点向历史版本连边,然后拓扑排序即可

需要注意的是,历史版本可能不存在,这个时候不能连( ╯□╰ )

Code


#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
#define rep(i,st,ed) for (register int i=st;i<=ed;++i)
#define drp(i,st,ed) for (register int i=st;i>=ed;--i)const int N=50005*20;
const int E=50005*100;struct edge {int y,next;} e[E];
struct treeNode {int l,r;} t[N];int fa[N][18],d[N],dep[N],s[N];
int a[N],L[N],R[N],rt[N];
int ls[N],edCnt,n,tot;int read() {int x=0,v=1; char ch=getchar();for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());return x*v;
}void add_edge(int x,int y) {e[++edCnt]=(edge) {y,ls[x]};ls[x]=edCnt; d[y]++;
}int get_lca(int x,int y) {if (dep[x]<dep[y]) std:: swap(x,y);drp(i,16,0) if (dep[fa[x][i]]>=dep[y]) x=fa[x][i];if (x==y) return x;drp(i,16,0) if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];return fa[x][0];
}void top_sort() {static int q[N];int h=1,t=0;rep(i,2,n+tot) if (!d[i]) {q[++t]=i;}for (;h<=t;) {int x=q[h++]; s[x]=-1;for (int i=ls[x];i;i=e[i].next) {int y=e[i].y;if (!(--d[y])) q[++t]=y;}}dep[1]=1; q[1]=1;for (h=1,t=1;h<=t;) {int x=q[h++];for (int i=ls[x];i;i=e[i].next) {int y=e[i].y;if (!fa[y][0]) fa[y][0]=x;else fa[y][0]=get_lca(fa[y][0],x);if (!(--d[y])) {q[++t]=y; s[y]+=s[fa[y][0]];dep[y]=dep[fa[y][0]]+1;rep(i,1,16) fa[y][i]=fa[fa[y][i-1]][i-1];}}}
}void modify(int &now,int pre,int tl,int tr,int x,int v) {t[now=++tot]=t[pre];if (pre) add_edge(now+n,pre+n);if (tl==tr) {add_edge(now+n,v);return ;}int mid=(tl+tr)>>1;if (x<=mid) {modify(t[now].l,t[pre].l,tl,mid,x,v);add_edge(now+n,t[now].l+n);} else {modify(t[now].r,t[pre].r,mid+1,tr,x,v);add_edge(now+n,t[now].r+n);}
}void query(int now,int tl,int tr,int l,int r,int x) {if (r<l||!now) return ;if (tl>=l&&tr<=r) {add_edge(x,now+n);return ;}int mid=(tl+tr)>>1;query(t[now].l,tl,mid,l,std:: min(r,mid),x);query(t[now].r,mid+1,tr,std:: max(mid+1,l),r,x);
}int main(void) {n=read();rep(i,1,n) a[i]=read();rep(i,1,n) L[i]=read(),R[i]=read();drp(i,n,1) {query(rt[i+1],1,n,L[i],R[i],i);if (i!=1) modify(rt[i],rt[i+1],1,n,a[i],i);}rep(i,1,n) s[i]=1;top_sort();rep(i,1,n) printf("%d\n", s[i]);return 0;
}

jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图相关推荐

  1. [POI2015] Pustynia(差分约数,线段树优化建图,拓扑)

    传送门 Description 给定一个长度为n的正整数序列aaa,每个数都在111到10910^9109范围内,告诉你其中sss个数,并给出mmm条信息,每条信息包含三个数l,r,kl,r,kl,r ...

  2. jzoj 4240.【五校联考5day2】游行 主席树优化连边+支配树

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  3. JZOJ 4238. 【五校联考5day2】纪念碑

    Description 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一个长为n,宽为m的矩形.它由n* m个1*1的 ...

  4. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  5. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  6. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  7. [jzoj 4246] 【五校联考6day2】san {spfa+dfs/spfa+拓扑排序+dp}

    题目 Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能 ...

  8. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  9. 4246. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

最新文章

  1. linux 通过命令行获取本机外网IP
  2. Mybatis的解析模块基础
  3. 统计一下你写过多少代码
  4. 一种在MVC3框架里面设置模板页的方法,不使用_ViewStart
  5. LINUX内核下跑单片机按键,S3C2440下linux按键驱动编写及测试程序
  6. go数据类型之map
  7. linux 内核恐慌,linux – CentOS 6.5 mdadm Raid 1 – raid数据检查期间的内核恐慌
  8. 微信小程序之阿里图标库icon的symbol引入无需下载支持彩色图标
  9. windows平台下获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
  10. Java常用对象总结
  11. 优麒麟 20.04 pro更换内核
  12. 输入身份证号自动算出年龄,出生日期,性别
  13. 舒城中学2021年高考成绩查询,舒城教育信息网——舒城县教育局关于对2019年荣获高考目标奖的学校和个人表彰的通报...
  14. 讲讲Python中的函数传递问题 【文末送书】
  15. 计算机主机不通电,电脑主机不通电无法开机怎么解决
  16. 《脱颖而出——成功网店经营之道》一2.2 进货攻略
  17. 高防IP适合那些行业呢?
  18. 《Apple 设计奖 2014》出炉,还无辜的《Threes!》一个公道了
  19. 【RT-Thread】STM32的UART设备读取GPS数据
  20. XP设置屏保密码,但不设置开机密码问题

热门文章

  1. ArcGIS制作“马赛克”渔网图
  2. 16系列显卡支持的计算机系统,老卡福音:NVIDIA GeForce GTX 10和GTX 16系列显卡 将支持DRX光追技术...
  3. 到了35岁,软件测试职业发展之困惑如何解?
  4. 《游戏王》(Yu-Gi-Oh!) 启示录
  5. OpenGL基础图形编程(八)变换
  6. 小程序,大世界-web点播直播入门-代码的自我修养-进阶的直梯
  7. 腾讯云 Finops Crane 开发者集训营 - 云成本优化一站式解决方案实践
  8. 素数判定质因数分解(数论)(Miller Rabin)(Pollard Rho)
  9. 计算机磁盘存储实现原理
  10. 东师计算机教育综合,2021年东北师范大学学前教育专硕考研必看成功上岸前辈复习经验谈...