UVA 12345 Dynamic len(带修莫队)
Dynamic len
【题目链接】Dynamic len
【题目类型】带修莫队
&题解:
莫队可以单点更改,只要再多加一维,代表查询次数,排序的时候3个关键字.
之后循环离线的时候,先暴力时间指针(oi大佬说的),之后l,和r就随便了.还有要会用vis数组.
【时间复杂度】\(O(n^{\frac{5}{3}})\)
&代码:
#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
const int maxn = 5e4 + 7;
struct nt {
int l, r, id, ts;
} ask[maxn];
struct nd {
int x, pre, v;
} p[maxn];
int n, m, an[maxn], c[maxn], pos[maxn], num[maxn * 20], last[maxn], ans;
bool vis[maxn];
char s[9];
bool cmp(nt a, nt b) {
return pos[a.l] < pos[b.l] ||
pos[a.l] == pos[b.l] && pos[a.r] < pos[b.r] ||
pos[a.l] == pos[b.l] && pos[a.r] == pos[b.r] && a.ts < b.ts;
}
void update(int x) {
if(vis[x]) {
if(!--num[c[x]]) --ans;
}
else if(++num[c[x]] == 1) ans++;
vis[x] ^= 1;
}
void change(int x, int v) {
if(vis[x]) {
update(x); c[x] = v; update(x);
}
else c[x] = v;
}
int main() {
//("E:1.in", "r", stdin);
scanf("%d%d", &n, &m);
int x, y, tot = 0, top = 0;
int bk = sqrt(n);
for(int i = 1; i <= n; i++) {
scanf("%d", &c[i]);
last[i] = c[i];
pos[i] = i / bk;
}
for(int i = 1; i <= m; i++) {
scanf("%s%d%d", s, &x, &y);
x++;
if(s[0] == 'Q') {
//[++tot].id必须要赋为tot. 而且这句话必须在第一位写
ask[++tot].id = tot;
ask[tot].l = x, ask[tot].r = y, ask[tot].ts = top;
}
else {
p[++top].x = x, p[top].v = y, p[top].pre = last[x];
last[x] = y;
}
}
sort(ask + 1, ask + 1 + tot, cmp);
int now = 0, pl = 1, pr = 0;
for(int i = 1; i <= tot; i++) {
if(now < ask[i].ts) {
for(int j = now + 1; j <= ask[i].ts; j++)
change(p[j].x, p[j].v);
}
else {
for(int j = now; j >= ask[i].ts + 1; j--)
change(p[j].x, p[j].pre);
}
if(pr < ask[i].r) {
for(int j = pr + 1; j <= ask[i].r; j++)
update(j);
}
else {
for(int j = pr; j >= ask[i].r + 1; j--)
update(j);
}
if(pl < ask[i].l) {
for(int j = pl; j <= ask[i].l - 1; j++)
update(j);
}
else {
for(int j = pl - 1; j >= ask[i].l; j--)
update(j);
}
pl = ask[i].l, pr = ask[i].r, now = ask[i].ts;
an[ask[i].id] = ans;
}
for(int i = 1; i <= tot; i++) {
printf("%d\n", an[i]);
}
return 0;
}
UVA 12345 Dynamic len(带修莫队)的更多相关文章
- LG4074【WC2013】糖果公园 【树上莫队,带修莫队】
题目描述:给出一棵 \(n\) 个点的树,点有颜色 \(C_i\),长度为 \(m\) 的数组 \(V\) 和长度为 \(n\) 的数组 \(W\).有两种操作: 将 \(C_x\) 修改为 \(y\ ...
- P5168 xtq玩魔塔 [克鲁斯卡尔重构树+带修莫队]
P5168 xtq玩魔塔 又是码农题- 利用克鲁斯卡尔重构树的性质 我们就可以得出 \(dep\) 值小的,肯定比 \(dep\) 大的值要优. 于是第二问就可以直接 LCA 求出来了- 至于第三问, ...
- 【BZOJ-3052】糖果公园 树上带修莫队算法
3052: [wc2013]糖果公园 Time Limit: 200 Sec Memory Limit: 512 MBSubmit: 883 Solved: 419[Submit][Status] ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
- BZOJ2120 数颜色 莫队 带修莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...
- BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...
- bzoj 2120 数颜色 (带修莫队)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间 l - r 内颜色的种类 ,R 单点修改 思路 ...
- BZOJ 4129 Haruna’s Breakfast (分块 + 带修莫队)
4129: Haruna’s Breakfast Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 835 Solved: 409[Submit][St ...
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
随机推荐
- C语言 · 猜算式 · 乘法竖式
题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x 15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x *** ------- ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- msm audio platform 驱动代码跟踪
sound/soc/soc-core.c static int __init snd_soc_init(void) { #ifdef CONFIG_DEBUG_FS snd_soc_debugfs_r ...
- 程序员自己编写的类和JDK类是一种合作关系。
封装类: JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载. 除了int和char,其余类型首字母大写即成封装类. 转换字符的方式: int I=10; Str ...
- Mybatis常考面试题汇总(附答案)
1.#{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字 ...
- Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar
一 Java中excel转换为jpg/png图片 package com.thinkgem.jeesite.modules.task.util; import com.aspose.cells.Im ...
- react proxy 报错
react项目中,package.json中proxy的配置如下 "proxy": { "/api/rjwl": { "target": & ...
- nuxt跨域
根据nuxt官方文档提供的axios module 安装: npm install @nuxtjs/axios @nuxtjs/proxy --save nuxt.config.js modules: ...
- gitlab+jenkins+tomcat war包部署(此文有新版本)
对本文进行格式整理,url: https://www.cnblogs.com/huandada/p/9969234.html 整个项目的框架为: 1.gitlab的安装(Centos7) 新建/etc ...
- 升级 phpstud y中的 mysql 版本
1.找到你 phpstudy 安装目录,找到 MySQL 文件夹 (我自己的实际目录 D:\pc\phpstudy\MySQL),关掉退出 phpstudy服务,删除 MySQL 文件夹里的文件,如 ...