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;
    }
    

      

  • 相关阅读:
    自动化部署之jenkins及简介
    gitlab的备份与恢复与迁移
    P2561 [AHOI2002]黑白瓷砖
    P2042 [NOI2005]维护数列
    P2156 [SDOI2009]细胞探索
    P2154 [SDOI2009]虔诚的墓主人
    P2148 [SDOI2009]E&D
    2019.2.26考试T2 矩阵快速幂加速DP
    loj #6485. LJJ 学二项式定理 (模板qwq)
    P3224 [HNOI2012]永无乡
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/10208792.html
Copyright © 2011-2022 走看看