链接:

https://loj.ac/problem/6284

题意:

给出一个长为 的数列,以及 个操作,操作涉及区间询问等于一个数 的元素,并将这个区间的所有元素改为 。

思路:

维护一个分块是否全部等于一个值,不等于时跑暴力即可.

查询一段时先把对应的分块更新再查询和更改.

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
//#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string>
#include <assert.h>
#include <iomanip>
#define MINF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;
const int MOD = 10007; int a[MAXN], Tag[MAXN];
int Belong[MAXN];
int n, part, last; void Reset(int pos)
{
if (Tag[pos] == -1)
return;
for (int i = (pos-1)*part+1;i <= pos*part;i++)
a[i] = Tag[pos];
Tag[pos] = -1;
} int Solve(int l, int r, int c)
{
int cnt = 0;
Reset(Belong[l]);
for (int i = l;i <= min(Belong[l]*part, r);i++)
{
if (a[i] == c)
cnt++;
a[i] = c;
}
if (Belong[l] != Belong[r])
{
Reset(Belong[r]);
for (int i = max((Belong[r]-1)*part+1, l);i <= r;i++)
{
if (a[i] == c)
cnt++;
a[i] = c;
}
}
for (int i = Belong[l]+1;i <= Belong[r]-1;i++)
{
if (Tag[i] != -1)
{
if (Tag[i] == c)
cnt += part;
Tag[i] = c;
}
else
{
for (int j = (i-1)*part+1;j <= i*part;j++)
{
if (a[j] == c)
cnt++;
a[j] = c;
}
Tag[i] = c;
}
}
return cnt;
} int main()
{
scanf("%d", &n);
part = sqrt(n);
memset(Tag, -1, sizeof(Tag));
for (int i = 1;i <= n;i++)
{
scanf("%d", &a[i]);
Belong[i] = (i-1)/part+1;
}
int op, l, r, c;
for (int i = 1;i <= n;i++)
{
scanf("%d%d%d", &l, &r, &c);
printf("%d\n", Solve(l, r, c));
} return 0;
}

LOJ-6284-数列分块入门8的更多相关文章

  1. LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)

    #6284. 数列分块入门 8 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  2. LOJ#6284. 数列分块入门 8

    分块的时候开一个数组标记这个区间是不是都是一样颜色的部分,如果是的话,我后面的查询,更新部分就可以直接整块操作,对于不是不全部都一样颜色的块在具体进到快里面去暴力. 在更新的时候对边上的两个不完整的块 ...

  3. LOJ.6284.数列分块入门8(分块)

    题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...

  4. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

    #6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给 ...

  5. LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)

    #6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  6. LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)

    #6282. 数列分块入门 6 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 1   题目描述 给出 ...

  7. LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)

    #6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5   题目描述 给出 ...

  8. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论   题目描述 给出一个 ...

  9. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3   题目描述 给 ...

  10. LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)

    #6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出 ...

随机推荐

  1. jvm学习笔记:一、类的加载、连接、初始化

    在JAVA代码中,类型的加载.连接与初始化过程都是程序运行期间完成的. 类型的加载:将已经存在的class从硬盘加载到内存. 类型的连接:将类与类之间的关系确定好. 类型的初始化:类型 静态的变量进行 ...

  2. HCL试验9

    PC1配置: ip:192.168.1.1 掩码:255.255.255.0 网关:192.168.1.254 上路由器配置: sys int gi0/0 ip add 192.168.100.10 ...

  3. Linux C\C++基础——数组形参的使用

    1.数组形参 ]) void fun(int a[]) void fun(int *a) ],int n) void fun(char*p[],int n) void fun(char**p,int ...

  4. 3D玫瑰花

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. 搭建本地parcel仓库

    参考:https://www.cloudera.com/documentation/enterprise/6/6.2/topics/cm_ig_create_local_parcel_repo.htm ...

  6. python学习笔记四 (运算符重载和命名空间、类)

    从以上代码中应该了解到: obj.attribute  查找的顺序: 从对象,类组成的树中,从下到上,从左到右到查找最近到attribute属性值,因为rec中存在name的属性,所以x.name可以 ...

  7. plpython 中文分词Windows 版

    windows 下安装版本匹配python-3.4.3.amd64.msipostgresql-10.1-2-windows-x64.exe create language plpython3u;se ...

  8. hello1的web.xml解析

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" ...

  9. HDU 2018 Cow Story DP

    Basic DP Problem URL:https://vjudge.net/problem/HDU-2018 Describe: There is a cow that gives birth t ...

  10. HDU 3416 Marriage Match IV (最短路建图+最大流)

    (点击此处查看原题) 题目分析 题意:给出一个有n个结点,m条单向边的有向图,问从源点s到汇点t的不重合的最短路有多少条,所谓不重复,意思是任意两条最短路径都不共用一条边,而且任意两点之间的边只会用一 ...