• bzoj 4551


    4551

    思路:

      乱搞;

    代码:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define maxn 100005
    #define maxm maxn<<1
    #define maxtree maxn<<2
    int n,head[maxn],E[maxm],V[maxm],cnt,m,deep[maxn],li[maxn],ri[maxn];
    int val[maxtree],L[maxtree],R[maxtree],mid[maxtree],key[maxtree],tmp1,tmp2;
    bool if_[maxtree];
    inline void in(int &now)
    {
        char Cget=getchar();now=0;
        while(Cget>'9'||Cget<'0') Cget=getchar();
        while(Cget>='0'&&Cget<='9')
        {
            now=now*10+Cget-'0';
            Cget=getchar();
        }
    }
    void dfs(int now,int fa)
    {
        deep[now]=deep[fa]+1,li[now]=++cnt;
        for(int i=head[now];i;i=E[i])
        {
            if(V[i]==fa) continue;
            dfs(V[i],now);
        }
        ri[now]=cnt;
    }
    void build(int now,int l,int r)
    {
        L[now]=l,R[now]=r;
        if(l==r)
        {
            if_[now]=true,val[now]=1,key[now]=1;
            return;
        }
        mid[now]=l+r>>1;
        build(now<<1,l,mid[now]);
        build(now<<1|1,mid[now]+1,r);
    }
    void change(int now,int l,int r,int va,int ke)
    {
        if(L[now]>=l&&R[now]<=r)
        {
            if(if_[now])
            {
                if(ke>key[now])key[now]=ke,val[now]=va;
            }
            else if_[now]=true,key[now]=ke,val[now]=va;
            return;
        }
        if(l<=mid[now]) change(now<<1,l,r,va,ke);
        if(r>mid[now]) change(now<<1|1,l,r,va,ke);
    }
    void query(int now,int to)
    {
        if(if_[now]&&key[now]>tmp2) tmp1=val[now],tmp2=key[now];
        if(L[now]==R[now]) return;
        if(to<=mid[now]) query(now<<1,to);
        else query(now<<1|1,to);
    }
    int main()
    {
        in(n),in(m);int u,v;
        for(int i=1;i<n;i++)
        {
            in(u),in(v);
            E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
            E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
        }
        cnt=0,dfs(1,0),build(1,1,n);
        char op[5];
        for(int i=1;i<=m;i++)
        {
            scanf("%s",op),in(u);
            if(op[0]=='C') change(1,li[u],ri[u],u,deep[u]);
            else tmp1=1,tmp2=1,query(1,li[u]),printf("%d
    ",tmp1);
        }
        return 0;
    }
  • 相关阅读:
    vray学习笔记(5)-学习资料
    vray学习笔记(4)混合材质是个什么东西
    vray学习笔记(3)-多维子材质是个什么东西
    vray学习笔记(2)vray工作流程
    vray学习笔记(1)vray介绍
    怎么让一个东西看起来比较亮?
    怎么给一个贴图创建透明通道
    BMP是可以保存alpha通道的。
    逆向分析底纹
    关于photoshop处理图片的自动化
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/7323761.html
Copyright © 2020-2023  润新知