【BZOJ】2120: 数颜色 带修改的莫队算法
【题意】给定n个数字,m次操作,每次询问区间不同数字的个数,或修改某个位置的数字。n,m<=10^4,ai<=10^6。
【算法】带修改的莫队算法
【题解】对于询问(x,y,t),其中t是前面的修改次数,所有修改记录改前和改后。
首先按belong[x],然后按belong[y],最后按t排序。(块大小n^(2/3))
移动询问,先移动t,然后移动x和y,运用对称差操作实现。如果移动t前修改格访问过,先删除影响,修改,再加回。
区间莫队需要注意的还有操作顺序问题,区间先拓展再收缩,以及修改的开闭边界问题需要特别注意(左右是不同的)。
哦还有还有,初始是(0,0,0)的话,令vis[0]=1。
为什么我说得这么草率?因为写完了糖果公园后就真的没什么好说的了……当然还是在区间移动上面栽了一下233。
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int belong[maxn],n,m,pre[maxn],c[maxn],d[],ans=,c0,c1,ANS[maxn];
bool vis[maxn];
struct q{int x,y,t,id;}b[maxn];
struct mo{int x,y,pre;}a[maxn];
bool cmp(q a,q b){return belong[a.x]<belong[b.x]||(belong[a.x]==belong[b.x]&&belong[a.y]<belong[b.y])||
(belong[a.x]==belong[b.x]&&belong[a.y]==belong[b.y]&&a.t<b.t);}
void solve(int x){
if(!vis[x])ans+=(++d[c[x]]==);
else ans-=(--d[c[x]]==);//
vis[x]^=;
}
void modify(int x,int y){
if(!vis[x])c[x]=y;
else solve(x),c[x]=y,solve(x);
}
char s[];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&c[i]),pre[i]=c[i];
for(int i=;i<=m;i++){
int u,v;
scanf("%s%d%d",s,&u,&v);
if(s[]=='R')a[++c0]=(mo){u,v,pre[u]},pre[u]=v;
else {if(u>v)swap(u,v);b[++c1]=(q){u,v,c0,c1};}
}
int Q=(int)pow(n,2.0/);
for(int i=;i<=n;i++)belong[i]=(i-)/Q+;
sort(b+,b+c1+,cmp);
vis[]=;//
for(int i=;i<=c1;i++){
for(int j=b[i-].t+;j<=b[i].t;j++)modify(a[j].x,a[j].y);
for(int j=b[i-].t;j>b[i].t;j--)modify(a[j].x,a[j].pre);
for(int j=b[i-].y+;j<=b[i].y;j++)solve(j);//
for(int j=b[i-].x-;j>=b[i].x;j--)solve(j);
for(int j=b[i-].x;j<b[i].x;j++)solve(j);
for(int j=b[i-].y;j>b[i].y;j--)solve(j);
ANS[b[i].id]=ans;
}
for(int i=;i<=c1;i++)printf("%d\n",ANS[i]);
return ;
}
【BZOJ】2120: 数颜色 带修改的莫队算法的更多相关文章
- BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树
https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...
- Luogu P1903 BZOJ 2120 数颜色 带修改的莫队
https://www.luogu.org/problemnew/show/P1903 之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的…… 这个题卡常我没写 ...
- Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 2645 Solved: 1039[Submit][Status][Discuss] ...
- bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...
- BZOJ 2120 数颜色 (带修莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6367 Solved: 2537[Submit][Status][Discuss] ...
- BZOJ2120 数颜色(带修改的莫队算法)
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- bzoj 2120 数颜色 (带修莫队)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间 l - r 内颜色的种类 ,R 单点修改 思路 ...
- BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3665 Solved: 1422[Submit][Status][Discuss] ...
- P1903 [国家集训队]数颜色 (带修改莫队)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
随机推荐
- Alpha冲刺阶段集合贴
第一篇:http://www.cnblogs.com/xss6666/p/8870734.html 第二篇:http://www.cnblogs.com/xss6666/p/8893683.html ...
- PHP 操作redis 详细讲解 转的 http://www.cnblogs.com/jackluo/p/3412670.html
phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github. ...
- Kafka生产者各种启动参数说明
首先是启动一个生产者 final String kafkazk="localhost:9092"; String topic="testAPI"; Proper ...
- 第165天:canvas绘制圆环旋转动画
canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...
- 第89天:HTML5中 访问历史、全屏和网页存储API
一.访问历史 API 通过history对象实现前进.后退和刷新之类的操作 history新增的两个方法history.replaceState()和history.pushState()方法属于HT ...
- 第79天:jQuery事件总结(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 一.合成事件 jQuery有两个合成事件——hove ...
- 【Java】CSVUtils
package com.msk.ds.logic; import java.io.*; import java.util.List; /** * Created by Administrator on ...
- BZOJ5011 JXOI2017颜色(主席树)
相当于求满足在子段中出现的颜色只在该子段中出现的非空子段数量.这也就相当于其中出现的颜色最左出现的位置在左端点右侧,最右出现的位置在右端点左侧.那么若固定某个端点,仅考虑对该端点的限制,会有一段合法区 ...
- BZOJ4925 城市规划
对每个人行道求出移动距离在哪些区间内时其在建筑物前面.现在问题即为选一个点使得其被最多的区间包含.差分即可.对建筑暴力去掉重叠部分.开始时没有去重用了nm次vector的push_back,时间大概是 ...
- Day21-自定义分页
一. 先简单来个示例 1.1 在urls.py中增加1条,user_list from django.conf.urls import url,include from django.contrib ...