[luogu3939][数颜色]
思路
对于每一种颜色都建立一个动态开点线段树。然后每次查询的时候就去这个颜色的线段树上查询就行了。修改之后不要忘记交换颜色。
这个题目数据有点强。抄了个比较快的读入优化才卡过去。
代码
/*
* @Author: wxyww
* @Date: 2018-12-13 08:59:51
* @Last Modified time: 2018-12-13 09:56:16
*/
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N = 600000;
#include <sys/mman.h>
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#define Finline __inline__ __attribute__ ((always_inline))
struct io{
char *s;
io():s((char*)mmap(0, 1<<26, PROT_READ, MAP_PRIVATE, fileno(stdin), 0)) {}
inline operator int()
{
register int x=0;
for(;*s<48;++s);
for(;*s>47;)x=x*10+*s++-48;
return x;
}
}io;
int TR[N * 20],a[N],ls[N * 20],rs[N * 20];
int tot,root[N];
inline void update(int &cur,int l,int r,int pos,int c) {
if(!cur) cur = ++tot;
if(l == r) {
TR[cur] += c;
return;
}
TR[cur] += c;
int mid = (l + r) >> 1;
if(pos <= mid) update(ls[cur],l,mid,pos,c);
else update(rs[cur],mid + 1,r,pos,c);
}
inline int query(int cur,int l,int r,int L,int R) {
if(L <= l && R >= r) return TR[cur];
int mid = (l + r) >> 1,ans = 0;
if(L <= mid) ans += query(ls[cur],l,mid,L,R);
if(R > mid) ans += query(rs[cur],mid + 1,r,L,R);
return ans;
}
int main() {
int n = io,m = io;
for(int i = 1;i <= n;++i) {
a[i] = io;
update(root[a[i]],1,n,i,1);
}
while(m--) {
int opt = io;
if(opt == 1) {
int l = io,r = io,c = io;
printf("%d\n",query(root[c],1,n,l,r));
}
else {
int x = io;
update(root[a[x]],1,n,x,-1);
update(root[a[x]],1,n,x + 1,1);
update(root[a[x + 1]],1,n,x + 1,-1);
update(root[a[x + 1]],1,n,x,1);
swap(a[x],a[x + 1]);
}
}
return 0;
}
[luogu3939][数颜色]的更多相关文章
- BZOJ 2120: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- BZOJ 2120 数颜色(带修改的莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 3478 Solved: 1342 [Submit][Status][Discus ...
- BZOJ 2120: 数颜色 分块
2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- Luogu 1903 数颜色 | 分块
Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...
- P3939 数颜色
目录 题目 思路1(待修莫队) 思路2(vector+二分) 代码1 代码2 题目 P3939 数颜色 思路1(待修莫队) 哇,这不是莫队模板题吗 3e5,TLE45分 不行 我有信仰啊 pow(n, ...
随机推荐
- python之路-列表、元组、range
一 . 列表 # 列表的定义 列表就是能装对象的对象 在python中用[ ]来描述列表,内部元素用逗号隔开,对数据类型没有要求 索引和切片 lst = ["天龙八部", &quo ...
- ServiceLoader详解
系统中用到了ServiceLoader,查了一下: ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一 ...
- 跨站请求伪造和cookie伪造
CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站 ...
- List接口方法
package cn.zhou.com; /* * List?-------是啥? Collection 的一个子接口! * * 集合?容器? * * 区分容器,每个容器的数据结构不一样! * 集合, ...
- The Bug and Exception of Hibernate
1: hibernate4.3.5 的@oneToOne注解有Bug,建议不使用该版本,或者使用该版本不使用@table annotation. 2:今天在用hibernate4.2.13的时候, ...
- redis两种持久化
Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据 ...
- Maven使用(一)—— Maven的安装与全局配置
一.Maven安装 Maven的安装步骤: 1.Maven官网(http://maven.apache.org/)下载压缩包,解压缩,当前最新版本是apache-maven-3.5.3-bin.zip ...
- 在idea中设置记住git的用户名和密码
在idea中设置记住git的用户名和密码 1.在项目根目录下执行以下git命令: git config --global credential.helper store 2.执行上述命令后,在idea ...
- .net core Include问题
本文章为原创文章,转载请注明出处 当时不知道为什么这样写,可能是突然间脑子停止了转动,既然犯过这样的错误,就记录下来吧 错误示例 ).Include(a=>a.User).Select(a =& ...
- 浅析Android设备中grep命令处理流程
2017-04-18 概述 在TV开发板中,可以在串口中直接使用grep命令.这是因为在/system/bin/下有一个'grep'链接.这个链接指向'/system/bin/toolbo ...