BZOJ 4399: 魔法少女LJJ
来源:互联网 发布:windows phone 知乎 编辑:程序博客网 时间:2024/05/01 22:33
4399: 魔法少女LJJ
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 287 Solved: 73
Description
在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了
LJJ感叹道“这里真是个迷人的绿色世界,空气清新、淡雅,到处散发着醉人的奶浆味;小猴在枝头悠来荡去,好不自在;各式各样的鲜花争相开放,各种树枝的枝头挂满沉甸甸的野果;鸟儿的歌声婉转动听,小河里飘着落下的花瓣真是人间仙境”
SHY觉得LJJ还是太naive,一天,SHY带着自己心爱的图找到LJJ,对LJJ说:“既然你已经见识过动态树,动态仙人掌了,那么今天就来见识一下动态图吧”
LJJ:“要支持什么操作?”
SHY:“
1.新建一个节点,权值为x。
2.连接两个节点。
3.将一个节点a所属于的联通快内权值小于x的所有节点权值变成x。
4.将一个节点a所属于的联通快内权值大于x的所有节点权值变成x。
5.询问一个节点a所属于的联通块内的第k小的权值是多少。
6.询问一个节点a所属联通快内所有节点权值之积与另一个节点b所属联通快内所有节点权值之积的大小。
7.询问a所在联通快内节点的数量
8.若两个节点a,b直接相连,将这条边断开。
9.若节点a存在,将这个点删去。
”
LJJ:“我可以离线吗?”
SHY:“可以,每次操作是不加密的,”
LJJ:“我可以暴力吗?”
SHY:“自重”
LJJ很郁闷,你能帮帮他吗
Input
第一行有一个正整数m,表示操作个数。
接下来m行,每行先给出1个正整数c。
若c=1,之后一个正整数x,表示新建一个权值为x的节点,并且节点编号为n+1(当前有n个节点)。
若c=2,之后两个正整数a,b,表示在a,b之间连接一条边。
若c=3,之后两个正整数a,x,表示a联通快内原本权值小于x的节点全部变成x。
若c=4,之后两个正整数a,x,表示a联通快内原本权值大于x的节点全部变成x。
若c=5,之后两个正整数a,k,表示询问a所属于的联通块内的第k小的权值是多少。
若c=6,之后两个正整数a,b,表示询问a所属联通快内所有节点权值之积与b所属联通快内所有节点权值之积的大小,
若a所属联通快内所有节点权值之积大于b所属联通快内所有节点权值之积,输出1,否则为0。
若c=7,之后一个正整数a,表示询问a所在联通块大小
若c=8,之后两个正整数a,b,表示断开a,b所连接的边。
若c=9,之后一个正整数a,表示断开a点的所有连边
具体输出格式见样例
Output
Sample Input
12
1 2
1 3
1 4
1 5
1 6
2 1 2
2 2 3
2 3 4
2 4 5
9 1
3 2 5
5 3 4
Sample Output
6
HINT
对100%的数据 0<=m<=400000,c<=7,所有出现的数均<=1000000000,所有出现的点保证存在
【HINT】请认真阅读题面
Source
By liuchenrui
/************************************************************** Problem: 4399 User: Twi_etn Language: C++ Result: Compile_Error****************************************************************/// from: Claris#include<iostream>#include<cstring>#include<cmath>#include<algorithm>#include<cstdio>using namespace std;const int N=400010,M=7000000;int i,x,y,op[N][3],b[N],U,fa[N],T[N],cnt,n,m;int tot,l[M],r[M],v[M];double s[M],L[N];int read(){ int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int find(int x){ return fa[x]==x ? x : fa[x]=find(fa[x]);}void Ins(int &x,int a,int b,int c,int d,double e){ if(!x) x= ++tot; v[x]+=d;s[x]+=e; if(a==b) return; int mid=(a+b)>>1; if(c<=mid) Ins(l[x],a,mid,c,d,e); else Ins(r[x],mid+1,b,c,d,e);}inline int lower(int x){ int l=1,r=U,mid,t; while(l<=r){ mid=(l+r)>>1; if(b[mid]<=x)l=mid+1,t=mid; else r=mid-1; } return t;}void up(int x){ v[x]=v[l[x]]+v[r[x]]; s[x]=s[l[x]]+s[r[x]];}void del(int x,int a,int b,int c,int d){ if(!v[x]) return; if(a==b){ cnt+=v[x];v[x]=0;s[x]=0; return ; } int mid=(a+b)>>1; if(c<=mid)del(l[x],a,mid,c,d); if(d>mid) del(r[x],mid+1,b,c,d); up(x);}int Merge(int x,int y,int a,int b){ if(!x) return y; if(!y) return x; if(a==b){ v[x]+=v[y];s[x]+=s[y]; return x; } int mid=(a+b)>>1; l[x]=Merge(l[x],l[y],a,mid); r[x]=Merge(r[x],r[y],mid+1,b); return up(x),x;}int K_TH(int x,int k){ int a=1,b=U,mid; while(a<b){ mid=(a+b)>>1; if(v[l[x]]>=k)b=mid,x=l[x]; else k-=v[l[x]],a=mid+1,x=r[x]; } return a;}int main(){ m=read(); for(int i=1;i<=m;i++){ op[i][0]=read();op[i][1]=read(); if(op[i][0]>1&&op[i][0]<7)op[i][2]=read(); if(op[i][0]==1)b[++U]=op[i][1]; if(op[i][0]==3||op[i][0]==4)b[++U]=op[i][2]; } sort(b+1,b+U+1); for(int i=1;i<=U;i++)L[i]=log(b[i]); for(int i=1;i<=m;i++){ int x=op[i][1],y=op[i][2]; if(op[i][0]==1){ x=lower(x),n++; fa[n]=n;Ins(T[n],1,U,x,1,L[x]); } if(op[i][0]==2){ x=find(x),y=find(y); if(x==y) continue; fa[x]=y; T[fa[x]]=Merge(T[x],T[y],1,U); } if(op[i][0]==3){ x=find(x),y=lower(y),cnt=0; if(y>1)del(T[x],1,U,1,y-1); if(cnt)Ins(T[x],1,U,y,cnt,L[y]*cnt); } if(op[i][0]==4){ x=find(x),y=lower(y),cnt=0; if(y<U)del(T[x],1,U,y+1,U); if(cnt)Ins(T[x],1,U,y,cnt,L[y]*cnt); } if(op[i][0]==5)printf("%d\n",b[K_TH(T[find(x)],y)]); if(op[i][0]==6)puts(s[T[find(x)]]>s[T[find(y)]]?"1":"0"); if(op[i][0]==7)printf("%d\n",v[T[find(x)]]); } return 0;}
- BZOJ 4399: 魔法少女LJJ
- 4399: 魔法少女LJJ
- [线段树 合并] BZOJ 4399 魔法少女LJJ
- BZOJ 4399 魔法少女LJJ 线段树合并
- 【bzoj 4399】魔法少女LJJ(线段树合并)
- BZOJ[4399]魔法少女LJJ 线段树合并
- BZOJ4399: 魔法少女LJJ
- BZOJ4399: 魔法少女LJJ treap
- 【线段树合并】【bzoj4399】: 魔法少女LJJ
- 魔法少女
- 魔法少女
- 魔法少女
- 魔法少女
- bzoj 4399 魔法少女 权值线段树合并+并查集
- nbut_1010 魔法少女 dp
- 拯救魔法少女
- nyist 1204 魔法少女
- nyoj 1204魔法少女
- STC单片机IO方波脉冲输出
- JS 图片转Base64编码
- LMAX架构
- 蓝桥杯之反幻方
- egret 必须先添加监听再设置skin
- BZOJ 4399: 魔法少女LJJ
- Android中的dex、apk、ClassLoader详解
- multiselect选项框
- 软考知识点
- Pandas 通用方法
- js排序后的状态如何在后端保存
- 对于LayoutInflater.from(parent.getContext()).inflate()方法的笔记
- 正确使用第三方iOS代码
- java数组--冒泡排序