带修改莫队,每次查询前调整修改

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 20005
using namespace std;
int n,m,nn,a[N],be[N],l,r,num[1000005],tot,qq,cc;
bool vis[N];
struct Change{
int pos,nxt,pre;
}ch[1005];
struct Query{
int l,r,tim,id,ans;
}qr[10005];
bool cmp1(Query a,Query b){
if(be[a.l]==be[b.l]) return a.r<b.r;
return be[a.l]<be[b.l];
}
bool cmp2(Query a,Query b){
return a.id<b.id;
}
void change(int pos,int now){
if(pos>=l&&pos<=r){
if(!(--num[a[pos]]))
tot--;
if(++num[now]==1)
tot++;
}
a[pos]=now;
}
void update(int pos){
if(vis[pos]){
vis[pos]=0;
if(!(--num[a[pos]]))
tot--;
return ;
}
if(!vis[pos]){
vis[pos]=1;
if(++num[a[pos]]==1)
tot++;
return ;
}
}
void work(){
l=1,r=0,tot=0;
qr[0].tim=cc;
for(int i=1;i<=qq;i++){
//printf("%d %d %d %d\n",qr[i].l,qr[i].r,qr[i].id,qr[i].tim);
for(int j=qr[i-1].tim+1;j<=qr[i].tim;j++)
change(ch[j].pos,ch[j].nxt);
for(int j=qr[i-1].tim;j>qr[i].tim;j--)
change(ch[j].pos,ch[j].pre);
while(l<qr[i].l) update(l++);
while(l>qr[i].l) update(--l);
while(r<qr[i].r) update(++r);
while(r>qr[i].r) update(r--);
qr[i].ans=tot;
}
}
int main()
{
scanf("%d%d",&n,&m); nn=(int)sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
be[i]=(i-1)/nn+1;
}
char s; int aa,bb;
for(int i=1;i<=m;i++)
{
s=getchar();
while(s!='Q'&&s!='R')s=getchar();
scanf("%d%d",&aa,&bb);
if(s=='R'){
ch[++cc].pos=aa;
ch[cc].nxt=bb;
ch[cc].pre=a[aa];
a[aa]=bb;
}
if(s=='Q'){
qr[++qq].tim=cc;
qr[qq].l=aa;
qr[qq].r=bb;
qr[qq].id=qq;
}
}
sort(qr+1,qr+qq+1,cmp1);
work();
sort(qr+1,qr+qq+1,cmp2);
for(int i=1;i<=qq;i++)
printf("%d\n",qr[i].ans);
return 0;
}

bzoj 2120 数颜色 带修改莫队的更多相关文章

  1. BZOJ 2120 数颜色 (带修莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6367  Solved: 2537[Submit][Status][Discuss] ...

  2. bzoj 2120 数颜色 (带修莫队)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改 思路 ...

  3. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

    BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...

  4. BZOJ2120数颜色(带修改莫队)

    莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...

  5. BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...

  6. Luogu P1903 BZOJ 2120 数颜色 带修改的莫队

    https://www.luogu.org/problemnew/show/P1903 之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的…… 这个题卡常我没写 ...

  7. P1903 [国家集训队]数颜色 (带修改莫队)

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

  8. P1903 [国家集训队]数颜色 带修改莫队板子

    大概就是要多加一维time 然后按照(l的块,r的块,time)为关键字排序 转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态) 然后玄学dalao告诉窝块大小设为\(O(n^{\frac{ ...

  9. [国家集训队][bzoj2120] 数颜色 [带修改莫队]

    题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...

随机推荐

  1. Course1-Python数据类型总结

    一. 开始正式学习前的tips: Python和其他语言有很多类似, 也有一些差异, 下面先总结了一些基本语法上的注意事项 1. 注意缩进 2. 一行语句分为多行显示: \ 3. 注释: 单行注释#, ...

  2. 途牛java实习面试(失败)

    一进去让自己介绍.简单介绍了一下.然后让我自己说说框架.问题太大一紧张卡住了. 然后面试官开始问,让我介绍多线程,我就简单介绍了多线程.然后问我有没有做过多线程的项目,我说没有. 问了MySQL的锁和 ...

  3. 设置eclipse全局编码格式

    window--preference--general--workspace--text file encoding

  4. java中内存的使用

    一个java运行起来执行代码,主要的内存消耗有这几块: 1.堆 2.栈 :栈是每个线程一个的,是以消耗的内存是内存大小*线程数,当线程数特多时候需要小心 . 3.直接内存:主要是通道时候的缓存,在内存 ...

  5. JSP指令与动作

    Jsp基本指令和动作 (2011-08-18 16:25:13) 转载▼ 标签: 杂谈 分类: java JSP基本指令 jsp命令指令用来设置与整个jsp页面相关的属性,它并不直接产生任何可见的输出 ...

  6. css 字体两端对齐

    我想作为一个前端工作者,总会遇到这样的场景,一个表单展示的字段标题有4个字也有2个字的时候,这样子同时存在想展示的美观一点,就需要字体两端对齐了,其实实现方式很简单,我针对其中一种来做下介绍,以后方法 ...

  7. SOFA 源码分析 —— 过滤器设计

    前言 通常 Web 服务器在处理请求时,都会使用过滤器模式,无论是 Tomcat ,还是 Netty,过滤器的好处是能够将处理的流程进行分离和解耦,比如一个 Http 请求进入服务器,可能需要解析 h ...

  8. 微信小程序入门三实战

    微信小应用借鉴了很多web的理念,但是其与传统的webApp.微信公共号这些BS架构不同,他是CS架构,是客户端的程序 小程序开发实战--豆瓣电影 项目配置 -在app.jsop中进行简单配置 --n ...

  9. Flex 对Xml对象操作

    一.读取.xml文件() import flash.events.Event;   import flash.net.URLLoader;   import flash.net.URLRequest; ...

  10. VS下使用Google Protobuf完成SOCKET通信

    如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 出处:如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 最近一 ...