题目传送门

裸的带修莫队。

在Sort时如果左右区间都在同一块中,就按询问的修改的先后Sort。

对于每次查询判断向前或向后修改。

当size为N*2/3时据说是最优。O(N^(3/5))。

code:

/**************************************************************
    Problem: 2120
    User: yekehe
    Language: C++
    Result: Accepted
    Time:884 ms
    Memory:5652 kb
****************************************************************/
 
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
inline char tc(void){
    static char fl[],*A=fl,*B=fl;
    return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
int read()
{
    char c;while(c=tc(),c<''||c>'');
    int x=c-'';while(c=tc(),c>=''&&c<='')x=(x<<)+(x<<)+c-'';
    return x;
}
 
int N,M,size,a[],D[],Be[],ans,sum[],A[],l,r,t;
struct Query{int l,r,tim,id;}Q[];int Qs;
struct Change{int x,bef,to;}C[];int Cs;
 
int cmp(Query x,Query y){
    return Be[x.l]==Be[y.l]?
        (Be[x.r]==Be[y.r]?x.tim<y.tim:x.r<y.r)
            :x.l<y.l;
}//CMP函数
void re(int x,int d){
    sum[x]+=d;
    if(!sum[x]&&d<)ans--;
    if(sum[x]==&&d>)ans++;
}
int ct(int x,int y){
    if(l<=x&&x<=r)re(a[x],-),re(y,);
    a[x]=y;
}
int main()
{
    N=read(),M=read();
        for(int i=;i<=N;i++)a[i]=read(),D[i]=a[i];
    int x,y;char c;
        for(int i=;i<=M;i++){
            while(c=tc(),c!='Q'&&c!='R');
            x=read(),y=read();
            if(c=='Q')Q[++Qs]=(Query){x,y,Cs,Qs};
            else C[++Cs]=(Change){x,D[x],y},D[x]=y;
        }
    size=pow(N,0.66666);
        for(int i=;i<=N;i++)
            Be[i]=(i-)/size+;
    sort(Q+,Q+Qs+,cmp);
    l=,r=,t=;
        for(int i=;i<=Qs;i++){
            while(t<Q[i].tim)t++,ct(C[t].x,C[t].to);//向后修改
            while(t>Q[i].tim)ct(C[t].x,C[t].bef),t--;//向前修改
            while(l<Q[i].l)re(a[l],-),l++;
            while(l>Q[i].l)re(a[--l],);
            while(r<Q[i].r)re(a[++r],);
            while(r>Q[i].r)re(a[r],-),r--;
            A[Q[i].id]=ans;
        }
        for(int i=;i<=Qs;i++)
            printf("%d\n",A[i]);
    return ;
}

BZOJ2120_数颜色_KEY的更多相关文章

  1. BZOJ 2120: 数颜色

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

  2. 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 283[Submit][Status][Discuss] ...

  3. BZOJ 2120 数颜色(带修改的莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discus ...

  4. BZOJ 2120: 数颜色 分块

    2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  5. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

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

  6. bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

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

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

  8. Luogu 1903 数颜色 | 分块

    Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...

  9. P3939 数颜色

    目录 题目 思路1(待修莫队) 思路2(vector+二分) 代码1 代码2 题目 P3939 数颜色 思路1(待修莫队) 哇,这不是莫队模板题吗 3e5,TLE45分 不行 我有信仰啊 pow(n, ...

随机推荐

  1. leveldb源码分析--Key结构

    [注]本文参考了sparkliang的专栏的Leveldb源码分析--3并进行了一定的重组和排版 经过上一篇文章的分析我们队leveldb的插入流程有了一定的认识,而该文设计最多的又是Batch的概念 ...

  2. 在centos系统安装mongodb

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...

  3. 配置consul为windows服务

    安装consul并配置为系统服务下载地址https://www.consul.io/downloads.html 配置系统服务1.拷贝consul.exe的目录 如:E:\Consul\consule ...

  4. spring配置datasource

    1.使用org.springframework.jdbc.datasource.DriverManagerDataSource  说明:DriverManagerDataSource建立连接是只要有连 ...

  5. 转:MVC框架

    MVC框架是什么 MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使 ...

  6. [UI] 精美UI界面欣赏[5]

    精美UI界面欣赏[5]

  7. 浅谈jodaTime 的使用

    第一步:引入依赖: 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-t ...

  8. oracle监听,数据库,oracle服务器的启动和停用

    一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器 ...

  9. 如何处理高并发情况下的DB插入

    1.  我们需要接收一个外部的订单,而这个订单号是不允许重复的 2.  数据库对外部订单号没有做唯一性约束 3.  外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...

  10. 2668: [cqoi2012]交换棋子

    Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. Input 第一行 ...