这道题,做的太悲催了,开始想到每个节点的涂色情况用数组来存,1代表有,0代表没有,提交上去果断RE了好几次,原因是here A, B, C are integers, and A may be larger than B没看到,哎审题不细心呀;

后来改后又tle了,哎这小又没招了,想到是不是没有优化好,然后绞尽脑汁的想优化,结果还是tle,后来无奈的搜了解题报道,才知道用到线段数组的延迟标记,表示压力很大,没办法,稍稍看懂后就表了别人的代码,就A了,哎。。。。。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
int n,m,c;
struct e
{
   int l,r;
   int state;
   bool id;
};
e tree[300010];
void build(int s,int t,int p)
{
    tree[p].l=s;
    tree[p].r=t;
    if(s==t) return;
    int k=(s+t)>>1;
    build(s,k,p<<1);
    build(k+1,t,(p<<1)|1);
}
void update(int s,int t,int p,int value)
{
   //  puts("bug");
   int i,j,k;
   if(s==tree[p].l&&t==tree[p].r)
   {
       tree[p].id=1;
       tree[p].state = 1<<(value-1);
       return;
   }
   if(tree[p].id)
   {
       tree[p].id=0;
       tree[p<<1].id=1;
       tree[(p<<1)|1].id=1;
       tree[p<<1].state=tree[p].state;
       tree[(p<<1)|1].state=tree[p].state;
   }
   int mid=(tree[p].l+tree[p].r)>>1;
   if(t<=mid)
      update(s,t,p<<1,value);
  else if(s>mid)
      update(s,t,(p<<1)+1,value);
  else
  {
     update(s,mid,p<<1,value);
     update(mid+1,t,(p<<1)|1,value);
  }
   tree[p].state=(tree[p<<1].state)|(tree[(p<<1)|1].state);
   if(tree[p<<1].id&&tree[(p<<1)+1].id&&tree[p<<1].state==tree[(p<<1)+1].state)
     tree[p].id=1;
}
int find(int s,int t,int p)
{
   if(s==tree[p].l&&t==tree[p].r)
   {
        return tree[p].state;
   }
   if(tree[p].id) return tree[p].state;
   int mid=(tree[p].l+tree[p].r)>>1;
   int i=0;
   if(t<=mid)
    return find(s,t,p<<1);
  else if(s>mid)
    return find(s,t,(p<<1)+1);
  else
  {
     i=find(s,mid,p*2);
     i|=find(mid+1,t,p*2+1);
     return i;
  }
  
}
int main()
{
    int i,j,k,color;
    while(scanf("%d%d%d",&n,&color,&m)!=-1)
    {
         build(1,n,1);
         tree[1].state=1;
         tree[1].id=1;
         while(m--)
         {
             getchar();
             char c;
             scanf("%c",&c);
             if(c=='C')
             {
                 scanf("%d%d%d",&i,&j,&k);
                 if(i<j) swap(i,j);
                 update(i,j,1,k);
             }
             else
             {
                 scanf("%d%d",&i,&j);
                 k=find(i,j,1);
                 int num=0;
                 if(i<j) swap(i,j);
               //  cout<<k<<endl;
                 for(int s=0;s<color;s++)
                   if(k&(1<<s)) num++;
                 printf("%d\n",num);
             }
         }
    }
   return 0;
}

转载于:https://www.cnblogs.com/one--world--one--dream/archive/2011/09/24/2189592.html

poj 2777Count Color相关推荐

  1. POJ 2054 Color a Tree (贪心)

    $ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息,因为每个点的费用和染色的次数有关,所以我们可以很自然的想到先给权值大的节点染色.但是题目还说每个节 ...

  2. POJ 2054 Color a Tree解题报告

    题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...

  3. POJ 2054 Color a Tree

    贪心....                    Color a Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:  ...

  4. POJ 1046 Color Me Less(浅水)

    一.Description A color reduction is a mapping from a set of discrete colors to a smaller one. The sol ...

  5. PKU/POJ 2054 Color a Tree

    关于树的着色. 要求从根节点出发, 遍历整棵树, 要求代价最小. 访问每个节点的代价V[i] = F[i] * C[i], C[i]为已知的值, F[i]则为访问该节点的时间. 每一步只能从已访问的节 ...

  6. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  7. 【读书笔记】《算法竞赛进阶指南》读书笔记——0x00基本算法

    to-do: 例题: POJ 1845 Sumdiv 所有的课后习题: 随缘~~~ 位运算 对于一个二进制数,通常称其最低位为第0位,从右往左依此类推. 补码 unsigned int 直接将其看作3 ...

  8. matlab里冒泡法比较大小,matlab冒泡法排序

    [1,2,3]; % 冒泡法排序,注意的是特征值顺序变化的同时要与相对应的下标同... 转换完之后对向量进行逆序排列, 我看到有同学硬是 写了一个冒泡排序来完成这个工作,你的数据结构老师一定非常欣慰. ...

  9. poj 2777 Count Color

    http://poj.org/problem?id=2777 简单线段树,[成段更新,成段查询]! View Code 1 #include <cstdio> 2 #include < ...

最新文章

  1. validator的Symbol Coverage没有100%
  2. 从各大跨平台技术说开去,我们真的需要虚拟 DOM 吗?
  3. 洛谷——P3807 【模板】卢卡斯定理
  4. 将TUM数据集制作成BundleFusion数据集
  5. 服务器win2008 R2 x64 部署ASP.net core到IIS 并解决 HTTP Error 502.5 的问题
  6. 小米平板5系列共三款机型:全系搭载2K/120Hz屏幕
  7. A - 顺序表应用1:多余元素删除之移位算法
  8. (best!)JAVA中文字符编码问题详解
  9. python读取目录里所有txt文件转excel
  10. 【docker】docker的简单状态监控
  11. ubuntu12 环境下编译freerdp
  12. mysql 嵌套查询优化
  13. FPGA时钟电路PCBlayout设计原则
  14. TI DSP处理器中CMD 文件的那些事儿
  15. 怎样用VR看分频视频?
  16. idea从插件市场或者外部插件库导入插件的方式
  17. ubuntu GRUB 引导加载 Beini(WiFi破解神器) Tiny Core Linux
  18. JDBC连接数据库模板
  19. template(模板)的介绍以及使用方法
  20. 软件安全实验(一)PEVIEW-弹窗操作

热门文章

  1. 成功跳槽百度工资从15K涨到28K,BAT大厂面试总结
  2. python【Numpy科学计算库】连女朋友都会用的Numpy(真の能看懂~!)
  3. div中有元素刷新不出来_DNF:神话罐子来了!500个不渝材料就能换,但你刷新不出来...
  4. python和软件自动化_软件测试和自动化测试
  5. matlab toolbox下载_Matlab自动导出高质量无变形论文插图
  6. python画笑脸步骤遇到的问题_用python绘制笑脸的基本步骤
  7. mysql-plus 动态修改全局sql, 进行数据隔离, 多租户, 多字段修改
  8. 企业网络推广专员浅析是否网站权重越高企业网络推广效果越好?
  9. 浅析建设企业网站的三大基本类型
  10. 网站在改版时如何降低对排名的影响呢?