zoukankan      html  css  js  c++  java
  • ZJU 1610

    用线段树写真是累.....尤其是最近在用JAVA做项目 怎么NEW  指针和引用 都混了/........哭~~~~~~~~~~
    先水一个可以AC的代码
    int main()
    {
        
    int n;
        
    while(scanf("%d",&n)!=EOF)
        
    {
            
    int Color[8000];
            
    int NumColor[8000];
            memset(Color,
    -1,sizeof(Color));
            memset(NumColor,
    0,sizeof(NumColor));
            
    int i;
            
    int left, right, color;

            
    for(i = 0; i < n; i++)
            
    {
                scanf(
    "%d%d%d"&left, &right, &color);
                
    for(int j=left;j<right;j++)
                
    {
                    Color[j]
    =color;
                }

            }

            
    int hold=-1;
            
    for(i = 0; i < 8000; i++)
            
    {
                
    if(Color[i]!=hold || hold == -1)
                
    {
                    NumColor[Color[i]]
    ++;
                    hold
    =Color[i];
                }

            }

            
    for(i = 0; i < 8000; i++)
            
    {
                
    if(NumColor[i]!=0)
                    printf(
    "%d %d\n",i,NumColor[i]);
            }

            printf(
    "\n");
        }

        
    return 0;
    }

    再线段树
    int Color[8000];
    int NumColor[8000];
    struct TNode{
            
        
    int left, right;
        
    int col;
        TNode 
    *LeftChild, *RightChild;
        TNode(){};
        
    void TNODE(int ,int );
        
    void Insert(int ,int ,int );
        
    void Count();

    };



    void TNode::TNODE(int left, int right)
    {
        
    this->left=left; this->right=right;
        
    if(right-left==1)
        {
            LeftChild
    =NULL;
            RightChild
    =NULL; 
        }
        
    else
        {
            
    int mid=(left+right)/2;
            TNode Tl;
            TNode Tr;
            LeftChild
    =&Tl;
            RightChild
    =&Tr;
            LeftChild
    ->TNODE(left,mid);
            RightChild
    ->TNODE(mid,right);
        }
    }
     
     
    void TNode::Insert(int left,int right,int color)
    {
        
    if (this->col==color)
        {}
        
    else
        {
            
    if( left == this->left && right == this->right )
                
    this->col = color;
            
    else
            {
                
    int mid=(this->left+this->right)/2;
                
    if(this->col!=-2
                {
                    LeftChild
    ->col=color;
                    RightChild
    ->col=color;
                }
                
    this->col=-2;
                
    if(left<=mid) 
                {
                    LeftChild
    ->Insert(left,right,color);
                }
                
    if(right>=mid)
                {
                    RightChild
    ->Insert(left,right,color);        
                }
                LeftChild
    ->Insert(left,mid,color);
                RightChild
    ->Insert(mid,right,color);
            }
        }
    }
     
     
    void TNode::Count()
    {
        
    if(col!=-2 && col!=-1 ) 
        {
            
    int i;
            
    for (i=left;i<right;i ++)
                Color[i]
    =col;
        }
        
    if(col==-2
        { 
            LeftChild
    ->Count();
            RightChild
    ->Count();
        }
    }


    int main()
    {
        
    int n;
        
    while(scanf("%d",&n)!=EOF)
        {
            
    int i;
            
    int left, right, color;
            TNode T;
            T.TNODE(
    0,8000);
            memset(Color,
    0,sizeof(Color));
            memset(NumColor,
    0,sizeof(NumColor));
            
    for(i = 0; i < n; i++)
            {
                scanf(
    "%d%d%d"&left, &right, &color);
                T.Insert(left,right,color);
            }
            
    int hold=-1;
            
    for(i=0;i<8000;i++)
            {
                
    if(Color[i]!=hold || hold==-1)
                {
                    NumColor[hold]
    ++;
                    hold
    =Color[i];
                }
            }
            
    for(i=0;i<8000;i++)
            {
                
    if(NumColor[i]!=0)
                    printf(
    "%d %d\n",i,NumColor[i]);
            }
        }
        
    return 0;
    }
  • 相关阅读:
    「题解」洛谷 P1731 [NOI1999]生日蛋糕
    「题解」洛谷 P1063 能量项链
    Log4j2笔记
    基数排序
    会计知识
    归并排序
    CF668 题解
    拉格朗日反演
    [国家集训队]数颜色 / 维护队列 「带修莫队」
    简单的填数「贪心」
  • 原文地址:https://www.cnblogs.com/SQL/p/886951.html
Copyright © 2011-2022 走看看