【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. 考虑新加进来一条边,想要让它能够减少一个联通块的条件就是现在边的两个端点还没有联通. 如果联通 ...
随机推荐
- 读懂IL代码(一)
以前刚开始学C#的时候,总有高手跟我说,去了解一下IL代码吧,看懂了你能更加清楚的知道你写出来的代码是如何运行互相调用的,可是那时候没去看,后来补的,其实感觉也不晚.刚开始看IL代码的时候,感觉非常吃 ...
- JavaScript HTML DOM - 改变 HTML
JavaScript HTML DOM - 改变 HTML HTML DOM 允许 JavaScript 改变 HTML 元素的内容. 改变 HTML 输出流 JavaScript 能够创建动态的 H ...
- javascript基础学习(五)
javascript之函数 学习要点: 函数的介绍 函数的参数 函数的属性和方法 系统函数 一.函数的介绍 1.函数就是一段javascript代码.可以分为用户自定义函数和系统函数. 如果一个函 ...
- Direct 2D实现界面库 (1)
大学时尝试过很多次写一个UI库, 初次使用 GDI 绘图, 当时水平很低, GDI功能太弱, 以失败而告终. 之后使用 GDI+ 绘图, 当时水平依旧很低, GDI功能很强, 但效率实在太慢, 以失败 ...
- 【POJ2266】【树状数组+离散化】Ultra-QuickSort
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- laravel4通过控制视图模板路劲来动态切换主题
通过控制视图模板路劲来动态切换主题 App::before(function($request) { $paths = Terminal::isMobile() ? array(__dir__.'/v ...
- magento错误 Service Temporarily Unavailable magento
前台访问出现错误 Service Temporarily Unavailable magento 解决方法 Service TemporarilyUnavailable字面意思是此服务暂时无法使用,如 ...
- javascript 设为首页 | 加入收藏夹 JS代码
我们介绍一个可兼容所有浏览器的加入收藏代码代码,大概原理是这样的我们根据获取用户navigator.userAgent.toLowerCase()信息来判断浏览器,根据浏览器是否支持加入收藏js命令, ...
- nginx——location 优先级
一. location 的匹配符1.等于匹配符:=等于匹配符就是等号,特点可以概括为两点:精确匹配不支持正则表达式2.空匹配符空匹配符的特点是:匹配以指定模式开始的 URI不支持正则表达式3.正则匹配 ...
- Unity3D RPC调用顺序问题
使用Unity自带的Network实现多人协同任务时,因为使用RPC传递消息.RPC即远程过程调用,对于它的使用,第一反应的问题就是如果连续两次调用RPC,RPC的函数会顺序执行吗?还是只要RPC的消 ...