5.16

image

糖丸了,其实是在为自己闲话创造头图。

喜报,终于找回了原来闲话的感觉(?)

果然还是得自己说一大堆没用的话才好啊,不能只放图(

image

image

好可爱啊(

bzoj4399: 魔法少女LJJ

非常好题,使我调到死。

现在没调完,但是其实就是线段树合并,动态开点,并查集,普通线段树区间查询等等的集合,全放一起就完事了,(谨防题目诈骗)

现在是对的code了

#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
namespace Watarai_Hinami
{
    inline void CLOSE(){std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);}
    inline void FIRE(){freopen(".in","r",stdin);freopen(".out","w",stdout);}
}
namespace Chongyun
{
    inline int read(){int s = 0,w = 1;char ch = getchar();while(ch<'0'||ch>'9'){ if(ch == '-') w = -1;ch = getchar();}while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}return s*w;}
    inline void write(int x){char F[20];int tmp=x>0?x:-x,cnt=0;;if(x<0)putchar('-') ;while(tmp>0){F[cnt++]=tmp%10+'0';tmp/=10;}while(cnt>0)putchar(F[--cnt]);}
}
using namespace Watarai_Hinami;
using namespace Chongyun;
const int N=4e6+10;
const int INF=1e9;
struct TREE
{
    bool tag;
    int dat,l,r;
    double logmul;
}t[N*20];
int fa[N];
int rt[N];
int cnt,tot;
inline int find(int x)
{
    return x==fa[x]? x : fa[x]=find(fa[x]);
}
inline void pushdown(int p)
{
    if(!t[p].tag) return;
    t[t[p].l].dat=t[t[p].r].dat=0,
    t[t[p].l].logmul=t[t[p].r].logmul=0;
    t[t[p].l].tag=t[t[p].r].tag=1,t[p].tag=0;
}
inline void update(int &p,int x,int a,double v,int l,int r)
{
    if(!p) p=++cnt;
    t[p].dat+=a,t[p].logmul+=a*v;
    if(l==r) return;
    pushdown(p);
    int mid=l+r>>1;
    if(mid>=x) update(t[p].l,x,a,v,l,mid);
    else update(t[p].r,x,a,v,mid+1,r);
}
inline void del(int p,int l,int r,int ll,int rr)
{
    if(!p) return;
    if(l<=ll && r>=rr)
    {  
        t[p].dat=t[p].logmul=0,t[p].tag=1;
        return;
    }
    pushdown(p);
    int mid=ll+rr>>1;
    if(l<=mid) del(t[p].l,l,r,ll,mid);
    if(mid<r) del(t[p].r,l,r,mid+1,rr);
    t[p].dat=t[t[p].l].dat+t[t[p].r].dat;
    t[p].logmul=t[t[p].l].logmul+t[t[p].r].logmul;
}
inline int merge(int u,int v)
{
    if(!u || !v) return u+v;
    t[u].dat+=t[v].dat,t[u].logmul+=t[v].logmul;
    pushdown(u),pushdown(v);
    t[u].l=merge(t[u].l,t[v].l),t[u].r=merge(t[u].r,t[v].r);
    return u;
}
inline int q5(int p,int l,int r,int k)
{
    if(l==r) return l;
    pushdown(p);
    int mid=l+r>>1;
    if(k<=t[t[p].l].dat) return q5(t[p].l,l,mid,k);
    else return q5(t[p].r,mid+1,r,k-t[t[p].l].dat);
}
inline int q7(int p,int l,int r,int b,int k)
{
    if(!p) return 0;
    if(l<=b && r>=k)
        return t[p].dat;
    pushdown(p);
    int mid=b+k>>1,ans=0;
    if(l<=mid) ans+=q7(t[p].l,l,r,b,mid);
    if(r>mid) ans+=q7(t[p].r,l,r,mid+1,k);
    return ans;
}
int x,a,b,q,k,ans,t1;
signed main()
{
    int n=read();
    for(int i=1;i<=n;++i)
    {
        int opt=read();a=read();
        if(opt==1)
        {
            update(rt[++tot],a,1,log(a),1,INF);
            fa[tot]=tot;
        }
        if(opt==2)
        {
            b=read();
            if(find(a)==find(b)) continue;
            rt[find(a)]=merge(rt[find(a)],rt[find(b)]);
            fa[find(b)]=fa[find(a)];
        }
        if(opt==3)
        {
            x=read();
            t1=q7(rt[find(a)],1,x,1,INF);
            del(rt[find(a)],1,x,1,INF);
            update(rt[find(a)],x,t1,log(x),1,INF);
        }
        if(opt==4)
        {
            x=read();
            t1=q7(rt[find(a)],x,INF,1,INF);
            del(rt[find(a)],x,INF,1,INF);
            update(rt[find(a)],x,t1,log(x),1,INF);
        }
        if(opt==5)
        {
            k=read();
            cout<<q5(rt[find(a)],1,INF,k)<<endl;
        }
        if(opt==6)
        {
            b=read();
            if(t[rt[find(a)]].logmul>t[rt[find(b)]].logmul) puts("1");
            else puts("0");
        }
        if(opt==7) cout<<t[rt[find(a)]].dat<<endl;
    }
}   

哈哈,大家对数据结构的爱很深厚啊(喜)

怎么【数据删除】又被封了,看来现在没法用百度账号了(

\(\text {Latex}\),该罚!

真的不会写Latex了😅😅😅

现在的我真的菜死了🤣🤣🤣

调出来了因为我瞎几把该变量名然后递归的时候寄了😡😡😡

posted @ 2024-05-16 21:43  HS_xh  阅读(46)  评论(4编辑  收藏  举报
init();