【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. 考虑新加进来一条边,想要让它能够减少一个联通块的条件就是现在边的两个端点还没有联通. 如果联通 ...
随机推荐
- SQL服务器名称的更改
SQL服务器名称的更改 1.使用select @@ServerName可以看到当前数据库的服务器名称 2.从Sys.SysServers表中可以看到当前的所有服务器名称 3.使用 sp_drops ...
- 功能: 用函数 funName 对数组 objArray 中的每个值进行处理一次,
function each( objArray, funName ) {//功能: 用函数 funName 对数组 objArray 中的每个值进行处理一次,for(var i=0; i<obj ...
- jQuery常用技巧大放送
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- phpexcel 一些基本的设置 (表格的基本属性)
网址是:http://www.thinkphp.cn/code/1893.html
- 史上最强NDK入门项目实战
目标: 利用NDK生成SO库,使用SO库进行JNI调用,在Android sdcard创建文件并写入数据. 工具: NDK1.5 R1, android SDK1.5 R1, SDCARD, Ecli ...
- 抽象数据类型Triplet的C语言实现
#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef int Status; ...
- Robot Motion
Description A robot has been programmed to follow the instructions in its path. Instructions for the ...
- Hibernate如何一个类映射两个表
一个User类有username,password属性,还有 otherInformation等其他属性,username和password映射到一个表,otherInformation等其他属性映射 ...
- xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限
http://blog.csdn.net/lanmanck/article/details/5722050 ---------------------------------------------- ...
- Maven实战七
转载:http://www.iteye.com/topic/973166 前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必 ...