/*
题意:
刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问
m次 输入 a,l,r,z 如果 a=1 将 l到 r 刷为 z 颜色,如果 a=2 询问 l 到 r 有 多少个 和 z 相同的 节点
官方题解是: 分段哈希,自己一开始想写 一下 ,单写着写着 就 觉得很麻烦 ,各中判断条件。。。。。
后来改为 线段树 优化了下 ,就是加了 个 mi mx 判断 查询的颜色 是否在这里面。。。。。
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define MAX 100010
using namespace std;
//线段树模板
struct line
{
int left, right; //左端点、右端点
int c;//color
int mini, most;
}a[4*MAX];
int v[MAX];
//建立
void build(int s, int t, int n)
{
int mid = (s + t) / 2;
a[n].left = s;
a[n].right = t;
if (s == t)
{
a[n].c = v[s];
a[n].mini = v[s];
a[n].most = v[s];
return;
}
build(s, mid, 2 * n);
build(mid + 1, t, 2 * n + 1);
if(a[2*n].c == a[2*n+1]
hdu4391(线段树查找区间内出现的个数)
最新推荐文章于 2019-12-06 19:58:28 发布
这篇博客介绍了一种使用线段树优化的算法,用于处理区间颜色查询和修改的问题。在刷墙的场景中,有n个节点各具一种颜色,存在m次询问,询问包括将某一区间颜色修改为指定颜色或者查询该区间内有多少节点颜色与指定颜色相同。博主最初尝试用分段哈希方法,但由于复杂性选择使用线段树,并增加了mi和mx判断以提高效率。
摘要由CSDN通过智能技术生成