【bzoj3514】Codechef MARCH14 GERALD07加强版
hzwer上少有的几道需要建一下模的 要不是有这么几道题 我都觉得lct只会考裸题了呢
题解看hzwer吧 http://hzwer.com/4358.html
唯一蛋疼的就是为了处理0这个呵呵的位置,和严格小于,我把ntr数组全部+2,然后l+1,这样建树的时候就要写m+2了= =好蛋疼
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cctype> using namespace std; const int Maxn=;
const int logn=; int a[Maxn],b[Maxn],ntr[Maxn];
int n,m,k,type; template<typename Q> void gt(Q&x) {
static char c;
static bool f;
for(f=;c=getchar(),!isdigit(c);) if(c=='-') f=;
for(x=;isdigit(c);c=getchar()) x=x*+c-'';
f && (x=-x);
} struct PST {
int seq[Maxn]; struct Node{
Node *l,*r;
int sz;
}pool[Maxn*logn],*pis,*root[Maxn],*null; void build(Node*&o,Node *p,int l,int r,int rk) {
o=pis++;
*o=*p;
o->sz++;
if(l==r) return;
int mid=(l+r)>>;
if(rk<=mid) build(o->l,p->l,l,mid,rk);
else build(o->r,p->r,mid+,r,rk);
} void init() {
pis=pool;
memcpy(seq,ntr,sizeof seq);
sort(seq+,seq+m+);
null=pis++;
null->l=null->r=null;
null->sz=;
root[]=null;
for(int i=;i<=m;i++) {
build(root[i],root[i-],,m+,ntr[i]);
}
} int query(Node*L,Node*R,int l,int r,int lft,int rgt) {
if(lft<=l && r<=rgt) return R->sz - L->sz;
int mid=(l+r)>>;
int ans=;
if(lft<=mid) ans+=query(L->l,R->l,l,mid,lft,rgt);
if(mid<rgt) ans+=query(L->r,R->r,mid+,r,lft,rgt);
return ans;
} int query(int l,int r,int x) {
return query(root[l-],root[r],,m+,,x);
}
}pst; int ch[Maxn*][],w[Maxn*],mn[Maxn*],p[Maxn*],flip[Maxn*]; #define l ch[x][0]
#define r ch[x][1]
void update(int x) {
mn[x]=x;
if(w[mn[l]]<w[mn[x]]) mn[x]=mn[l];
if(w[mn[r]]<w[mn[x]]) mn[x]=mn[r];
} void down(int x) {
if(flip[x]) {
swap(l,r);
flip[l]^=;
flip[r]^=;
flip[x]^=;
}
}
#undef l
#undef r bool isroot(int x) {
return ch[p[x]][]!=x && ch[p[x]][]!=x;
} void rotate(int x) {
int y=p[x],z=p[y];
if(!isroot(y)) ch[z][ch[z][]==y]=x;
int l=ch[y][]==x,r=l^;
p[x]=z;
p[y]=x;
p[ch[x][r]]=y; ch[y][l]=ch[x][r];
ch[x][r]=y; update(y);
// update(x);
} void splay(int x) {
static int stk[Maxn],top;
stk[top=]=x;
for(int t=x;!isroot(t);t=p[t]) stk[++top]=p[t];
while(top) down(stk[top--]); for(;!isroot(x);) {
int y=p[x],z=p[y];
if(!isroot(y)) {
if( (ch[y][]==x)^(ch[z][]==y) )rotate(x);
rotate(y);
}
rotate(x);
}
update(x);
} void access(int x) {
for(int t=;x;x=p[t=x]) {
splay(x);
ch[x][]=t;
update(x);
}
}
void newroot(int x) {
access(x);
splay(x);
flip[x]^=;
} void Link(int x,int y) {
newroot(x);
p[x]=y;
} void Cut(int x,int y) {
newroot(y);
access(x);
splay(x);
if(ch[x][]==y) {
ch[x][]=;
p[y]=;
update(x);
}
} int getroot(int x) {
for(access(x),splay(x);ch[x][];x=ch[x][]);
return x;
} const int INF=0x3f3f3f3f; void init() {
scanf("%d%d%d%d",&n,&m,&k,&type);
for(int i=;i<=n;i++) {
w[i]=INF;
mn[i]=i;
}
for(int x,y,i=;i<=m;i++) {
// scanf("%d%d",a+i,b+i);
gt(a[i]),gt(b[i]);
x=a[i],y=b[i];
if(x==y) {
ntr[i]=i;
continue;
}
if(getroot(x)==getroot(y)) {
newroot(y);
access(x);
splay(x);
int t=mn[x];
ntr[i]=w[t];
Cut(t,a[w[t]]);
// Cut(t,b[w[t]]);
}
mn[i+n]=i+n;
w[i+n]=i;
Link(x,i+n);
Link(y,i+n);
}
for(int i=;i<=m;i++) ntr[i]+=;
pst.init();
} void work() {
for(int l,r,last_ans=;k--;) {
// scanf("%d%d",&l,&r);
gt(l),gt(r);
if(type) l^=last_ans,r^=last_ans; last_ans=n-pst.query(l,r,l+);
printf("%d\n",last_ans);
}
} void PST_test() {
scanf("%d",&m);
for(int i=;i<=m;i++) {
scanf("%d",ntr+i);
}
for(int i=;i<=m;i++) ntr[i]+=;
pst.init();
for(scanf("%d",&k);k--;) {
int x,y,w;
scanf("%d%d%d",&x,&y,&w);w++;
printf("%d\n",pst.query(x,y,w));
}
} int main() {
#ifdef DEBUG
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif // PST_test();return 0; init();
work(); return ;
}
【bzoj3514】Codechef MARCH14 GERALD07加强版的更多相关文章
- [BZOJ3514]CodeChef MARCH14 GERALD07加强版(LCT+主席树)
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 2177 Solved: 834 ...
- 【LCT+主席树】BZOJ3514 Codechef MARCH14 GERALD07加强版
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 2023 Solved: 778 ...
- bzoj3514 Codechef MARCH14 GERALD07加强版 lct预处理+主席树
Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1951 Solved: 746[Submi ...
- BZOJ3514 Codechef MARCH14 GERALD07加强版 LCT
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3514 题意概括 N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. N ...
- BZOJ3514 : Codechef MARCH14 GERALD07加强版
以边编号为权值 用Link-cut Tree维护最大生成树 对于新加的第i条边(u,v) a[i]表示当a[i]这条边加入后连通块个数会减少 若u==v则a[i]=m 若u与v不连通则连上,a[i]= ...
- 沉迷Link-Cut tree无法自拔之:[BZOJ3514] Codechef MARCH14 GERALD07 加强版
来自蒟蒻 \(Hero \_of \_Someone\) 的 \(LCT\) 学习笔记 $ $ 又是一道骚题...... 先讲一个结论: 假设我们用 \(LCT\) 来做这道题, 在插入边 \(i\) ...
- BZOJ3514: Codechef MARCH14 GERALD07加强版【LCT】【主席树】【思维】
Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...
- BZOJ3514: Codechef MARCH14 GERALD07加强版(LCT,主席树)
Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密.接下来M ...
- BZOJ3514 Codechef MARCH14 GERALD07加强版 LCT+可持久化线段树
自己独自想出来并切掉还是很开心的~ Code: #include <bits/stdc++.h> #define N 400005 #define inf 1000000000 #defi ...
- BZOJ3514 Codechef MARCH14 GERALD07加强版 LCT维护最大生成树 主席树
题面 考虑没有询问,直接给你一个图问联通块怎么做. 并查集是吧. 现在想要动态地做,那么应该要用LCT. 考虑新加进来一条边,想要让它能够减少一个联通块的条件就是现在边的两个端点还没有联通. 如果联通 ...
随机推荐
- POJ刷题记录 (。・`ω´・)(Progress:6/50)
1743:前后作差可以转化成不可重叠最长公共字串问题,运用后缀数组解决(参考罗穗骞神犇的论文) #include <cstdio> #include <cstring> #in ...
- yield用法的一点理解
yield 关键字与 return 关键字结合使用,向枚举器对象提供值.这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值.yield 关键字也可与 break 结合使用,表示迭代结 ...
- javascript——函数内部属性
<script type="text/javascript"> //在函数内部有两个特殊的属性:arguments 和 this.arguments是一个类数组对象,包 ...
- 自己制作精美的App Store 软件截屏
当用户搜索到App的时候,一般都会先看截图,如果截图效果不好,可能用户就不会下载. 不想自己辛苦写的认为还不错的软件,因为截图的原因,而降低了很多下载量吧. 轻轻松松做出这样高大上的截屏效果来. Sc ...
- 动态改变数据库连接 in Entity Framework 5
今天把silverlight 升级到5,ADO.ENT EF也用NUGet升级到5.结果发现5下的EF默认没有4的那种分部方法了. 当然你可以把生成器的属性里面,生成代码的属性替换为default,默 ...
- JSP执行过程
JSP执行流程: @1.客户端发出请求. @2.Web容器将JSP转译成Servlet源代码. @3.Web容器将产生的源代码进行编译. @4.Web容器加载编译后的代码并执行. @5.把执行结果响应 ...
- Android SurfaceView使用
与View区别 更新View任务太重会导致UI线程阻塞 而SurfaceView不会,可以在UI线程之外更新UI 工程代码 SurfaceViewDemo.zip ------------------ ...
- MAC OSX使用篇
前述: 从windows平台切换到osx平台,的确没能一下子适应过来,在使用过程当中遇到了很多问题. link1:osx卸载应用程序的四种方法 link2:(推荐看)开始使用Mac OS X——写给M ...
- PHPStorm自动提示方法
第一种: /** * 一定要写@return static * @return static */ public static function getInstance() { $className ...
- Squares<哈希>
Description A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-d ...