链接:

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;
}

最新文章

  1. 编写自定义Yeoman生成器
  2. bug_ _ _常见的bug??
  3. Basic knowledge of javaScript (keep for myself)
  4. spring整合各大ORM框架的原理图
  5. 【转】virtualbox安装增强包及配置共享文件夹
  6. BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)
  7. spark 启动时候报 Unable to load native-hadoop library for your platform 警告
  8. 3Dmax导出fbx文件缺失纹理问题
  9. Sqlserver更新数据表xml类型字段内容某个节点值的脚本
  10. THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
  11. 道路运输车辆卫星定位系统JT/T808服务实现和压测
  12. cadence分列元件原理图库的设计
  13. day13 python迭代器与生成器
  14. 【Spring学习】SpringMVC demo搭建
  15. Delphi之Exception获得错误信息(简单好理解)
  16. phoenix技术(安装部署和基本使用)讲解
  17. python基础之字符串常用操作总结
  18. Hibernate之Hibernate环境搭建
  19. 详解ASP.NET Core Docker部署
  20. listView解决滑动时黑色背景问题

热门文章

  1. KVM虚拟化原理
  2. Ubuntu重启关机命令
  3. Andrew算法求二维凸包-学习笔记
  4. 【Linux开发】linux设备驱动归纳总结(八):4.总线热插拔
  5. ubantu
  6. filter方法常用过滤条件
  7. JAVA第四周总结
  8. 2019-2020Nowcoder Girl初赛题解
  9. leecode100热题 HOT 100(2)
  10. asp.net core在发布时排除配置文件