题解:

可修改莫队

我们加入一个时间T

然后在排序的时候考虑一下时间

在计算的时候也要考虑

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
struct Query
{
int l,r,Tim,id;
}q[N];
struct Change
{
int pos,New,Old;
}c[N];
char sign[];
int n,m,s[N],color[N*],t,x,y,Time,now[N],unit,Be[N],ans[N],Ans,l=,r,T;
int cmp(Query a,Query b)
{
if (Be[a.l]!=Be[b.l])return a.l<b.l;
if (Be[a.r]!=Be[b.r])return a.r<b.r;
return a.Tim<b.Tim;
}
void revise(int x,int d)
{
color[x]+=d;
if (d>)Ans+=color[x]==;
if (d<)Ans-=color[x]==;
}
void doit(int x,int d)
{
if (l<=x&&x<=r)
{
revise(d,);
revise(s[x],-);
}
s[x]=d;
}
int main()
{
scanf("%d%d",&n,&m);
int unit=pow(n,0.666666);
for (int i=;i<=n;i++)
{
scanf("%d",&s[i]);
now[i]=s[i];
Be[i]=i/unit+;
}
for (int i=;i<=m;i++)
{
scanf("%s%d%d",&sign,&x,&y);
if (sign[]=='Q')q[++t]=(Query){x,y,Time,t};
if (sign[]=='R')c[++Time]=(Change){x,y,now[x]},now[x]=y;
}
sort(q+,q+t+,cmp);
for (int i=;i<=t;i++)
{
while (T<q[i].Tim)doit(c[T+].pos,c[T+].New),T++;
while (T>q[i].Tim)doit(c[T].pos,c[T].Old),T--;
while (l<q[i].l)revise(s[l],-),l++;
while (l>q[i].l)revise(s[l-],),l--;
while (r<q[i].r)revise(s[r+],),r++;
while (r>q[i].r)revise(s[r],-),r--;
ans[q[i].id]=Ans;
}
for (int i=;i<=t;i++)printf("%d\n",ans[i]);
}

bzoj2120的更多相关文章

  1. 【bzoj2120】 数颜色

    http://www.lydsy.com/JudgeOnline/problem.php?id=2120 (题目链接) 题意 给出一个n个数,m个询问,每次询问一个区间或修改一个数,求区间内不同的数有 ...

  2. BZOJ2453维护队列&&BZOJ2120数颜色

    2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...

  3. BZOJ2120 数颜色 莫队 带修莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...

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

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

  5. BZOJ2120 数颜色 【带修莫队】

    BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...

  6. bzoj2120 数颜色 莫队 带修改

    [bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  7. [BZOJ2120][BZOJ2453]数颜色

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

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

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  9. BZOJ2120 数颜色

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

  10. bzoj2120 2453

    明显的数据结构题这道题的特殊性在于n只有10000,修改的操作只有1000那么就是说即便是O(n)的修改也没有太大的问题,只要常数写小一点即可考虑到以前对同色点的处理pre[i]表示与这个位置同色的前 ...

随机推荐

  1. django 多数据分库

    路由策略 # -*- coding: utf-8 -*- from django.conf import settings class DatabaseAppsRouter(object): &quo ...

  2. JS模块化方案

  3. PAT 1147 Heaps[难]

    1147 Heaps(30 分) In computer science, a heap is a specialized tree-based data structure that satisfi ...

  4. 【mybatis】认识selectKey

    转:https://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html 对于不支持自动生成类型的数据库或可能不支持自动生成主键 JDBC 驱动来说,MyBat ...

  5. cocos代码研究(20)Widget子类LoadingBar学习笔记

    理论基础 在一些操作中可视化指示进度条.显示给用户一个条表示操作已经完成了多少,继承自 Widget. 代码实践 static LoadingBar * create ()创建一个空的LoadingB ...

  6. mssql查询所有上下级

    if exists (select * from sys.all_objects where name='GetOrgTreeByID') begin drop proc GetOrgTreeByID ...

  7. TED #01#

    Laura Vanderkam: How to gain control of your free time 1.我们总是不缺乏时间去做重要的事情,即便我们再忙; “我没时间” 的同义词是“我不想做” ...

  8. poj3318 Matrix Multiplication

    poj3318 Matrix Multiplication 题意:给定$n*n(n<=500)$的矩阵$A,B,C$,如果$A*B==C$,输出“YES”,否则为“NO”:多组数据,$O(n^{ ...

  9. 课堂练习——Hash 20162305

    课堂练习--Hash 20162305 课堂练习要求 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合: ...

  10. 关于函数strtok和strtok_r的使用要点和实现原理(一)【转】

    本文转载自:http://astute11.blog.51cto.com/4404646/1334198 strtok函数的使用是一个老生常谈的问题了.该函数的作用很大,争议也很大.以下的表述可能与一 ...