zoukankan      html  css  js  c++  java
  • poj 2777Count Color

    http://poj.org/problem?id=2777

    注意:a可能比b大

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 #define maxn 1000010
      5 using namespace std;
      6 
      7 int  T,L,O,a,b,c;
      8 char ch;
      9 struct node
     10 {
     11     int l,r,co;
     12 }tree[3*maxn];
     13 bool tab[31];
     14 
     15 void build(int l,int r,int i)
     16 {
     17     tree[i].co=1;
     18     tree[i].l=l;tree[i].r=r;
     19     if(l<r)
     20     {
     21         int mid=(l+r)/2;
     22         build(l,mid,i+i);
     23         build(mid+1,r,i+i+1);
     24     }
     25 }
     26 
     27 void update(int i)
     28 {
     29     if(tree[i].co>0)
     30     {
     31         tree[i+i].co=tree[i+i+1].co=tree[i].co;
     32     }
     33     tree[i].co=-1;
     34 }
     35 
     36 void insert1(int i,int l,int r,int co)
     37 {
     38     if(tree[i].l>=l&&tree[i].r<=r)
     39     {
     40         tree[i].co=co;
     41         return ;
     42     }
     43     if(tree[i].l>r||tree[i].r<l) return ;
     44     if(tree[i].l<tree[i].r)
     45     {
     46         int mid=(tree[i].l+tree[i].r)/2;
     47         update(i);
     48         if(r<=mid) insert1(i+i,l,r,co);
     49         else if(l>mid) insert1(i+i+1,l,r,co);
     50         else
     51         {
     52             insert1(i+i,l,mid,co);
     53             insert1(i+i+1,mid+1,r,co);
     54         }
     55     }
     56 }
     57 
     58 void serch(int l,int r,int i)
     59 {
     60     if(tree[i].co>0)
     61     {
     62         tab[tree[i].co]=true;
     63         return ;
     64     }
     65     if(tree[i].l<tree[i].r)
     66     {
     67         int mid=(tree[i].l+tree[i].r)/2;
     68         if(r<=mid) serch(l,r,i+i);
     69         else if(l>mid) serch(l,r,i+i+1);
     70         else
     71         {
     72             serch(l,mid,i+i);
     73             serch(mid+1,r,i+i+1);
     74         }
     75     }
     76 }
     77 int main()
     78 {
     79     scanf("%d%d%d",&L,&T,&O);
     80     getchar();
     81     build(1,L,1);
     82     while(O--)
     83     {
     84         scanf("%c",&ch);
     85         if(ch=='C')
     86         {
     87             scanf("%d%d%d",&a,&b,&c);
     88             if(a>b)
     89                 swap(a,b);
     90             insert1(1,a,b,c);
     91         }
     92         else if(ch=='P')
     93         {
     94             scanf("%d%d",&a,&b);
     95             memset(tab,false,sizeof(tab));
     96             if(a>b) swap(a,b);
     97             serch(a,b,1);
     98             int num=0;
     99             for(int i=1; i<=T; i++)
    100             {
    101                 if(tab[i]) num++;
    102             }
    103             printf("%d
    ",num);
    104         }
    105         getchar();
    106     }
    107     return 0;
    108 }
    View Code
  • 相关阅读:
    [SCM]软件配置管理
    Jenkins入门总结
    Linux sh/bash[精华]
    [BRE]软件构建发布自动化
    python总结
    代码质量第 3 层 可读的代码
    记一次 WinDbg 分析 .NET 某工厂MES系统 内存泄漏分析
    记一次 .NET 某消防物联网 后台服务 内存泄漏分析
    Covariant(协变)与 Contravariant(逆变)
    三藩市湾区一周游
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3543416.html
Copyright © 2011-2022 走看看