zoukankan      html  css  js  c++  java
  • 洛谷P4979 矿洞:坍塌

    洛谷题目链接

    珂朵莉树吼啊!!!

    又是一道水题,美滋滋~~~

    $A$操作完全模板区间赋值

    $B$操作也是一个模板查询,具体看代码

    注意:读入不要用$cin$,会$T$,如果你是大佬,会玄学东西当我没说

    代码:

    #include<iostream>
    #include<cstdio>
    #include<set>
    #include<algorithm>
    #define N 500007
    #define Set set<Node>::iterator
    using namespace std;
    struct Node
    {
        int l,r;
        mutable char val;
        Node(int L,int R,char V):l(L),r(R),val(V){}
        Node(int L):l(L){}
        bool operator < (const Node &it)const
        {
            return l<it.l;
        }
    };
    set<Node> st;
    int n,m;
    #define isupper(x) ((x) >= 'A' && (x) <= 'Z')
    inline char rchar() {
        char c = getchar();
        while (!isupper(c)) c = getchar();
        return c;
    }
    Set Split(int x)
    {
        Set it=st.lower_bound(Node(x));
        if(it!=st.end()&&it->l==x)
            return it;
        --it;
        int L=it->l,R=it->r;
        char V=it->val;
        st.erase(it);
        st.insert(Node(L,x-1,V));
        return st.insert(Node(x,R,V)).first;
    }
    void Change(int l,int r,char v)
    {
        Set rr=Split(r+1),ll=Split(l);
        st.erase(ll,rr);
        st.insert(Node(l,r,v));
    }
    bool Search(int l,int r)
    {
        Set rr=Split(r+1),ll=Split(l);
        char now=ll->val;
        ++ll;
        for(Set it=ll;it!=rr;++it)
            if(it->val!=now)
                return 0;
        return 1;
    }
    bool Ok(int l,int r)
    {
        Set rr=Split(r+1),ll=Split(l);
        --ll;
        if(ll->val==rr->val)
            return 0;
        else
            return 1;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
        {
            char in;
            in=rchar();
            st.insert(Node(i,i,in));
        }
        st.insert(Node(n+1));
        scanf("%d",&m);
        for(int i=1;i<=m;++i)
        {
            char opt,v;
            int x,y;
            opt=rchar();
            scanf("%d%d",&x,&y);
            if(opt=='A')
            {
                v=rchar();
                Change(x,y,v);
            }
            else
            {
                if(Search(x,y))
                {
                    if(x==1||y==n)
                    {
                        printf("Yes
    ");
                    }
                    else
                    {
                        if(Ok(x,y))
                            printf("Yes
    ");
                        else
                            printf("No
    ");	
                    }
                }
                else
                    printf("No
    ");
            }		
        }
        return 0;
    }
    

      

  • 相关阅读:
    PHP基础介绍
    day96
    day95
    day94
    day93
    day93之微信推送
    22个必须知道的css技巧
    利用Js或Css滤镜实现IE6中PNG图片半透明效果 IE6PNG妥妥的
    dedecms调用日期格式化形式大全
    innerHTML动态添加html代码和脚本兼容性问题处理方法
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/10208792.html
Copyright © 2011-2022 走看看