【Codeforces319E】Ping-Pong
2017-10-25 16:52
274 查看
因为这题是区间之间的连边以及询问连通性之类的,所以考虑用线段树维护区间的并查集。
然后由于一些不可知原因MLE了,然后我改成动态开点的就好了。(smg??)
中间边界值太复杂,并没有思考过。
然后由于一些不可知原因MLE了,然后我改成动态开点的就好了。(smg??)
中间边界值太复杂,并没有思考过。
#include <bits/stdc++.h> #define gc getchar() #define ll long long #define mid (l+r>>1) #define inf 1e9 #define root rt,-inf,inf #define lc ls[cur] #define rc rs[cur] #define lson lc,l,mid #define rson rc,mid+1,r #define now cur,l,r #define N 100009 using namespace std; int rt,m,n,num,fa ,t,pos ,ls[N*40],rs[N*40],cnt; struct node { int x,y; node(int x=0,int y=0):x(x),y(y){} }p ; vector<int> tr[N*40]; int read() { int x=1; char ch; while (ch=gc,ch<'0'||ch>'9') if (ch=='-') x=-1; int s=ch-'0'; while (ch=gc,ch>='0'&&ch<='9') s=s*10+ch-'0'; return s*x; } int find(int x) { return fa[x]==x?x:fa[x]=find(fa[x]); } void merge(int x,int y) { assert(x!=0); p[y].x=min(p[y].x,p[x].x); p[y].y=max(p[y].y,p[x].y); fa[x]=y; } void add(int cur,int l,int r,int x,int y) { if (!cur) return; for (int i=0;i<tr[cur].size();i++) merge(find(tr[cur][i]),y); tr[cur].clear(); if (l==r) return; if (x<=mid) add(lson,x,y); else add(rson,x,y); } void Add(int &cur,int l,int r,int L,int R,int y) { if (L>R) return; if (!cur) cur=++cnt; if (L<=l&&R>=r) { tr[cur].push_back(y); return; } if (L<=mid) Add(lson,L,R,y); if (R>mid) Add(rson,L,R,y); } int main() { m=read(); for (int i=1;i<=m;i++) { int op=read(),x=read(),y=read(); if (op==1) { fa[++num]=num; p[num]=node(x,y); add(root,x,num),add(root,y,num); if (p[num].x+1<p[num].y) Add(root,p[num].x+1,p[num].y-1,num); //cout<<q[p[i].x-1]<<" "<<q[p[i].y-1]<<endl; } else { x=find(x),y=find(y); //cout<<x<<y<<endl; if (x==y||(p[x].x<p[y].y&&p[x].x>p[y].x)||(p[x].y<p[y].y&&p[x].y>p[y].x)) puts("YES"); else puts("NO"); } } return 0; }
相关文章推荐
- ping-pong操作
- ping-pong操作
- 【瞎玩】PingPong0.2
- Codeforces 320B Ping-Pong (Easy Version)
- POJ 3928 & hdu 2492 & Uva1428 PingPong 【树状数组】
- kernel ping pong boot(bootloader kernel 传递参数)
- POJ 3928 & hdu 2492 & Uva1428 PingPong 【树状数组】
- pingpong线程输出问题
- LA 4329 Ping pong / 树状数组
- Ping Pong 操作
- 2008 北京区域赛 ping pong // icpc 4329 ping pong
- Ping pong(树状数组经典)
- 4.3之后的PingPong效果实现
- (4329)Ping pong
- unity笔记3 - Mathf.Repeat and Mathf.PingPong
- hdu Ping pong Ping pong 线段树
- Ping-Pong (Easy Version)(DFS)
- Round #189 (Div.2) B. Ping-Pong (Easy Version)
- websocket心跳连接pingpong;
- ping-pong