• 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
  • 相关阅读:
    如何实现Android欢迎页
    创建webapi的简单步骤
    IOS里Request的斗争(上)
    预告:关于接下来的部分,都是番外。
    利用Selenium制作python数据抓取,以及对Selenium资源介绍
    利用openpyxl来读取Excel数据
    在pycharm下快速添加插件
    C# 分布式缓存服务器方案
    2014中国省市数据库
    FormsAuthentication 登录兼容 IE11 保存cookie
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3543416.html
Copyright © 2020-2023  润新知