QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#439567 | #6872. Magma Cave | Acoipp | ML | 0ms | 0kb | C++14 | 3.8kb | 2024-06-12 11:25:17 | 2024-06-12 11:25:17 |
answer
#include<bits/stdc++.h>
#define ll int
#define inf 0x3f3f3f3f
#define get(x) (tr[tr[x].fa].ch[1]==x)
#define isroot(p) (tr[tr[p].fa].ch[0]!=p&&tr[tr[p].fa].ch[1]!=p)
#define N 100005
#define Q 1000005
using namespace std;
inline char nc(){
static char buf[1000000],*p=buf,*q=buf;
return p==q&&(q=(p=buf)+fread(buf,1,1000000,stdin),p==q)?EOF:*p++;
}
inline ll read(){
ll res = 0;
char c = nc();
while(c<'0'||c>'9')c=nc();
while(c<='9'&&c>='0')res=res*10+c-'0',c=nc();
return res;
}
char obuf[1<<21],*p3=obuf;
inline void pc(char c){
p3-obuf<=(1<<20)?(*p3++=c):(fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=c);
}
inline void write(ll x){
if(x<0) pc('-'),x=-x;
if(x>9) write(x/10);
pc(x%10+'0');
}
ll T,n,m,q,opt,u,v,w,vis[Q];
struct poly{ll x,y,z;};
inline poly max(poly a,poly b,poly c){
if(a.z>=b.z&&a.z>=c.z) return a;
if(b.z>=a.z&&b.z>=c.z) return b;
return c;
}
struct node{ll ch[2],tag,fa;poly val,p;}emp;
struct bit{
ll tr[Q];
inline void add(ll k,ll x){
while(k<=q) tr[k]+=x,k+=k&(-k);
}
inline ll query(ll k){
ll num = 0;
while(k) num+=tr[k],k-=k&(-k);
return num;
}
};
struct lct{
ll m;
node tr[N];
map<ll,ll> maps[N];
bit bitt;
inline void pushup(ll p){tr[p].p = max(tr[tr[p].ch[0]].p,tr[tr[p].ch[1]].p,tr[p].val);}
inline void pushtag(ll p){
if(!p) return ;
swap(tr[p].ch[0],tr[p].ch[1]),tr[p].tag^=1;
}
inline void pushdown(ll p){if(tr[p].tag) pushtag(tr[p].ch[0]),pushtag(tr[p].ch[1]),tr[p].tag=0;}
inline void upd(ll p){pushup(p);if(!isroot(p)) upd(tr[p].fa);pushdown(p);}
inline void rotate(ll p){
ll y=tr[p].fa,z=tr[y].fa,k=get(p);
if(!isroot(y)) tr[z].ch[tr[z].ch[1]==y]=p;
tr[y].ch[k]=tr[p].ch[!k],tr[tr[p].ch[!k]].fa=y,tr[p].ch[!k]=y,tr[y].fa=p,tr[p].fa=z;
pushup(y),pushup(p);
}
inline void splay(ll p){
upd(p);
for(ll f;f=tr[p].fa,!isroot(p);rotate(p)) if(!isroot(f)) rotate(get(f)==get(p)?f:p);
}
inline ll access(ll p){
ll i;
for(i=0;p;i=p,p=tr[p].fa) splay(p),tr[p].ch[1]=i,pushup(p);
return i;
}
inline void makeroot(ll p){pushdown(p),access(p),splay(p),pushtag(p),pushup(p);}
inline void link(ll x,ll y){
makeroot(x),splay(x),tr[x].fa=y,pushup(x),pushup(y);
}
inline void cut(ll x,ll y){
makeroot(x),access(y),splay(y),tr[x].fa=0,tr[y].ch[0]=0,pushup(x),pushup(y);
}
inline ll find(ll p){
access(p),splay(p),pushdown(p);
while(tr[p].ch[0]) p=tr[p].ch[0],pushdown(p);
splay(p);
return p;
}
inline poly query(ll x,ll y){return makeroot(x),access(y),splay(y),tr[y].p;}
inline void add(ll u,ll v,ll w){
if(find(u)!=find(v)){
m++,tr[m].val = tr[m].p = (poly){u,v,w},link(u,m),link(m,v);
bitt.add(w,1);
maps[u][v] = maps[v][u] = w;
return ;
}
poly res = query(u,v);
if(res.z>w){
ll id = maps[res.x][res.y];
bitt.add(res.z,-1),bitt.add(w,1),maps[res.x][res.y] = maps[res.y][res.x] = 0,maps[u][v] = maps[v][u] = id;
cut(res.x,id),cut(id,res.y),tr[id].val = tr[id].p = (poly){u,v,w},link(u,id),link(id,v);
}
}
inline void clear(){
for(ll i=1;i<=q;i++) bitt.tr[i]=0;
for(ll i=1;i<=m;i++) tr[i]=emp;
for(ll i=1;i<=n;i++) maps[i].clear();
}
}lct1,lct2;
inline void add(ll u,ll v,ll w){
vis[w] = 1,lct1.add(u,v,w),lct2.add(u,v,q-w+1);
}
inline void solve(){
n=read(),q=read(),lct1.m = n,lct2.m = n;
for(ll i=1;i<=q;i++){
opt=read();
if(opt==1) u=read(),v=read(),w=read(),add(u,v,w);
else{
u=read(),w=read();
if(lct1.m==2*n-1&&vis[w]&&lct1.bitt.query(w)>=u&&lct2.bitt.query(q-w+1)<=u) pc('Y'),pc('E'),pc('S'),pc('\n');
else pc('N'),pc('O'),pc('\n');
}
}
}
inline void clear(){
for(ll i=1;i<=q;i++) vis[i]=0;
lct1.clear(),lct2.clear();
}
int main(){
T=read();
while(T--){
solve();
clear();
}
return fwrite(obuf,p3-obuf,1,stdout),0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Memory Limit Exceeded
input:
100 500 1999 1 112 419 318 1 419 208 1700 1 208 255 603 1 255 202 306 1 202 54 326 1 54 468 1506 1 468 23 856 1 23 90 758 1 90 271 1104 1 271 442 1900 1 442 441 19 1 441 378 1227 1 378 466 24 1 466 186 228 1 186 399 1387 1 399 288 297 1 288 144 1763 1 144 418 1896 1 418 217 673 1 217 281 1259 1 281 ...