博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3514(主席树+lct)
阅读量:6486 次
发布时间:2019-06-24

本文共 1402 字,大约阅读时间需要 4 分钟。

把边的编号看成边权,维护每个状态对应的最大生成树,得到一个数组a[i],表示第i条边在这个过程中替换的是那条边,询问时看一下a[l,r]内啊有多少个小于l的算一下答案就好;代码参考:http://blog.csdn.net/thy_asdf/article/details/50518526

//lct不好处理边权,把一条边转成夹在两个点之间的点; #include
#include
#include
#include
#include
using namespace std;const int maxn=400010,maxt=10000010,inf=1e9;struct edg{ int u,v;}e[maxn];struct node{ int l,r,v;}tr[maxt];int n,m,k,tot,root[maxn],a[maxn],type,lastans;void insert(int t,int l,int r,int &x){ ++tot;tr[tot]=tr[x];x=tot; ++tr[tot].v; if(l==r)return; int mid=l+r>>1; if(t<=mid)insert(t,l,mid,tr[x].l); else insert(t,mid+1,r,tr[x].r);}int qs(int x,int y,int l,int r,int L,int R){ if(r
R||l>r)return 0; if(l>=L&&r<=R)return tr[y].v-tr[x].v; int mid=l+r>>1; return qs(tr[x].l,tr[y].l,l,mid,L,R)+qs(tr[x].r,tr[y].r,mid+1,r,L,R); }struct node2{ int ls,rs,fa,is_root;}tre[maxn];int siz[maxn],mins[maxn],val[maxn],cnt,rev[maxn];void update(int x){ mins[x]=x; if(val[mins[tre[x].ls]]
>n>>m>>k>>type; val[0]=inf; for(int i=1;i<=n;++i)mins[i]=i,val[i]=inf; for(int i=1;i<=m;++i)scanf("%d%d",&e[i].u,&e[i].v); pre(); int l,r; for(int i=1;i<=k;++i){ scanf("%d%d",&l,&r); if(type)l^=lastans,r^=lastans; printf("%d\n",lastans=(n-qs(root[l-1],root[r],0,m,0,l-1))); } return 0;}

 

转载于:https://www.cnblogs.com/dibaotianxing/p/8508750.html

你可能感兴趣的文章
SegmentFault 助力 RTC Hackathon,一场别样的 Mini Hackathon
查看>>
Scala 编程风格指南[Databricks ]
查看>>
创业公司的高性价比运维
查看>>
custom-dns-for-internal-network
查看>>
Ajax跨域
查看>>
[练习]JS鼠标拖拽(DnD)操作
查看>>
jFinal路由解析源码分析
查看>>
webpack自动刷新
查看>>
Validate Binary Search Tree leetcode
查看>>
review 工具流程
查看>>
GitLab 发布安全修复版本 11.9.7, 11.8.7 和 11.7.11
查看>>
jQ实例篇--ajax请求json数据案例
查看>>
angular 指令简述
查看>>
Flask下"Uncaught SyntaxError: Unexpected token <",一个有意思的错误
查看>>
阿里云ECS云服务器更换公网IP的方法
查看>>
5G将为农村地区做些什么?
查看>>
大声说出你对女神的爱!Geek is A choice. Girls make difference. ...
查看>>
oracle查看执行计划
查看>>
RedisManager使用手册(五)-- 自定义Redis安装包
查看>>
「镁客早报」小米松果分拆成立大鱼半导体;ofo回应破产传闻 ...
查看>>