`
digiter
  • 浏览: 120474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pku 2777 Count Color

    博客分类:
  • ICPC
阅读更多
也是线段树经典题,不过做了好久...
这道题与之前的3468最大的区别在于它需要在递归前根据情况更新子节点的值,也就是
		if (count(tree[node]) == 1)
			tree[node * 2] = tree[node * 2 + 1] = tree[node];


#include <cstdio>
#include <algorithm>
using std::swap;

const int maxL = 100000 + 5;
int L, T, O, tree[maxL * 3] = {0};

int count(int x)
{
	int cnt = 0;
	while (x)
		++cnt, x -= x & -x;
	return cnt;
}

int A, B, C, color;
void add(int low, int high, int node)
{
	if (A <= low && high <= B) {
		tree[node] = color;
	} else if (low <= B && A <= high) {
		if (count(tree[node]) == 1)
			tree[node * 2] = tree[node * 2 + 1] = tree[node];
		int mid = (low + high) / 2;
		add(low, mid, node * 2);
		add(mid + 1, high, node * 2 + 1);
		tree[node] = tree[node * 2] | tree[node * 2 + 1];
	}
}

int query(int low, int high, int node)
{
	if (A <= low && high <= B) {
		return tree[node];
	} else if (low <= B && A <= high) {
		if (count(tree[node]) == 1)
			tree[node * 2] = tree[node * 2 + 1] = tree[node];
		int mid = (low + high) / 2;
		return query(low, mid, node * 2) | query(mid + 1, high, node * 2 + 1);
	}
	return 0;
}

int main()
{
	char op;
	scanf("%d%d%d", &L, &T, &O);
	for (int i = 1; i <= L; ++i)
	{
		A = B = i, color = 1;
		add(1, L, 1);
	}
	for (int i = 0; i < O; ++i)
	{
		scanf(" %c", &op);
		scanf("%d%d", &A, &B);
		if (A > B)
			swap(A, B);
		if (op == 'C') {
			scanf("%d", &C);
			color = 1 << (C - 1);
			add(1, L, 1);
		} else {
			printf("%d\n", count(query(1, L, 1)));
		}
	}
	return 0;
}
分享到:
评论

相关推荐

    pku 2054 color a tree 解题报告

    题目“2054-Color a Tree”是一个典型的树形结构优化问题,要求找到一种颜色节点的顺序,使得总成本最小。在这个问题中,每个节点都有一个“着色成本系数”Ci,节点i的着色成本是Ci乘以其被着色的时间Fi。时间在开始...

    pku.zip_PKU

    【标题】"pku.zip_PKU" 指的是一份与北京大学(Peking University, PKU)相关的压缩文件。从描述来看,这份压缩包包含了部分编程题目的代码,可能是学生或者爱好者在解决北京大学编程竞赛或课程作业时编写的。"pku"这...

    pku经典题目解题报告

    "pku经典题目解题报告"这一标题揭示了文件内容的核心,它表明这是一份关于北京大学(PKU)编程竞赛或算法竞赛中的经典问题的解答集。通常,这样的报告会涵盖一系列在PKU历年比赛中出现的难题,包含了解题思路、算法...

    pku1000程序 解题报告

    pku1000 pku1000程序 解题报告

    PKU-ACM.rar_PKU_acm 题目

    在编程竞赛的世界里,北京大学(PKU)的ACM团队以其高质量的题目和独特的解题思路闻名。"PKU-ACM.rar"这个压缩包包含了北大ACM题目的一些核心知识点,旨在帮助参赛者理解和掌握算法竞赛中的生命周期题目解法。本文将...

    ACM代码 之pku代码

    【标题】"ACM代码 之pku代码" 涉及的是在计算机科学领域中的算法竞赛编程,尤其是北京大学(Peking University, PKU)的ACM/ICPC(国际大学生程序设计竞赛)训练代码。这些代码是参赛者或教练为了准备这类竞赛而编写的,...

    PKU 课 件 ppt 等 灰常强大

    【标题】"PKU 课件 ppt 等 灰常强大" 指的是北京大学(PKU)的课程资料,其中包括了PPT演示文稿和其他相关文档资源,这些资料质量高、内容丰富,对学习者来说具有极高的价值。"灰常强大"这一网络用语表明这些课件...

    pku acm 一些代码

    标题 "pku acm 一些代码" 暗示了这是一个与北京大学(Peking University, 简称PKU)的ACM(国际大学生程序设计竞赛)相关的代码集合。在这个领域,参赛者通常需要解决算法问题,编写高效且优化的代码来求解数学、逻辑...

    用于人体动作识别的PKU-MMD大范围数据集

    benchmark (PKU-MMD) for continuous multi-modality 3D human action understanding and cover a wide range of complex human activities with well annotated information. PKU-MMD contains 1076 long video ...

    pku1664

    标题"Pku1664"很可能是指北京大学(Peking University)在某个编程竞赛或课程中的一道题目或项目,编号为1664。这道题目可能涉及到计算机科学的基础概念,尤其是算法和数据结构。描述中提到的是"Pku1664源代码",暗示...

    8数码代码pku1077

    8数码代码pku1077,300ms(哈希+广度搜索)

    PKU 2339 Rock, Scissors, Paper

    PKU 2339 Rock, Scissors, Paper 源代码

    pku acm 1469 COURSES 代码

    pku acm 1469 COURSES 代码 二分图的最大匹配的匈牙利算法 解题报告请访问:http://blog.csdn.net/china8848

    pku2371c++标程

    北京大学pku2317 Questions and answers c++标程 文件名为2371.cpp

    pku1742.rar_pku 17_pku 1742 _报告及程序

    标题中的“pku1742.rar_pku 17_pku 1742 _报告及程序”表明这是一个与北京大学(Peking University, 简称PKU)相关的项目,项目编号可能是1742,内容包括了结题报告和程序代码。这个压缩包很可能是学生或研究人员提交...

    ACM.rar_PKU_acm pku_pku 1709 crossword_pku acm_visual c

    标签部分进一步细化了内容:"pku acm_pku"再次强调这是北京大学ACM竞赛的资料,"pku__1709__crossword"可能是特定的题目标签,而"pku_acm"可能是北京大学ACM团队的标识。"visual_c"可能表示这些代码是使用C++语言,...

    acm_pku_code.zip_Code p_acm pku_acm pku pu_acm.pku_pku acm

    "p_acm"、"pku_acm"以及"pu_acm.pku_pku"等标签可能是用于分类或标识这些代码属于北京大学(Peking University, PKU)的ACM训练题目。"acm"一词重复出现,进一步强调了这是关于ACM编程竞赛的内容。 描述中提到"acmer...

    pku1088.rar_pku 10_pku 1088_poj 1088

    标题中的“pku1088.rar_pku 10_pku 1088_poj 1088”指的是北京大学(Peking University, PKU)编程竞赛中的第1088题,也称为POJ(Peking University Online Judge)的1088题。这个题目在编程竞赛社区中通常有一个特定的...

    pku_training.utf8

    分词训练用的pku训练集,主要是说明相似度计算的样例数据。

Global site tag (gtag.js) - Google Analytics