题目传送门

裸的带修莫队。

在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. Oracle EBS 应收API只创建收款没有核销行以及消息堆栈

    只创建了收款但没有创建核销行 排除其他原因 有可能是缓存溢出导致的这个要改成true 且使用消息堆栈处理

  2. npm install时报错“Unexpected end of JSON input while parsing near...”解决方法

    执行:npm cache clean --force 即可解决此问题

  3. 排序算法(2) 堆排序 C++实现

    堆 1 数组对象 2 可以视为一棵完全二叉树 3 一个堆可以被看作一棵二叉树和一个数组,如下图所示: 4 下标计算(通常使用内联函数或者宏来定义下标操作): 已知某个结点的下标为i 其父节点下标:i/ ...

  4. centos7.4应用之KVM

    最小安装系统: 参考博客:https://www.cnblogs.com/chenjiahe/p/5911965.html 辅助命令 yum install make bison flex autom ...

  5. Oracle判断表、列、主键是否存在的方法

    在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以需要判断其是否存在,现在我就把经常用到的一些判断方法和大家分 ...

  6. 内置数据结构(list)

    列表.元组.字符串.字典和集合是python内置的数据结构,也可以叫内置容器.前3个是线性结构,线性结构可以切片操作.解包和封包操作. dir()方法可以查看对象拥有哪些属性和方法. help()方法 ...

  7. SIM900A模块HTTP相关调试笔记

    SIM900A模块使用笔记 更新2018-12-8 正常工作状态: 接线方法: 首先将 AT 写入字符串输入框,然后点击 发送.因为模块波特率默认是 9600,所以两条指令的显示都是没有问题的:如果将 ...

  8. GNSS基础(持续更新)

    1.整周模糊度成功率 可参考文献:GNSS整周模糊度概率特性 2.正太分布 见百度百科 https://baike.baidu.com/item/%E6%AD%A3%E6%80%81%E5%88%86 ...

  9. Nginx变量.md

    ngx_http_core_module ngx_http_core_module模块支持名称与Apache服务器变量匹配的嵌入式变量. 首先,这些是表示客户请求头字段的变量,例如$ http_use ...

  10. 第三周:Excel分析

    Excel常用于敏捷,快速,需要短时间相应的场景下是非常便捷的数据处理工具. 相对于语言类例如python和R等则用于常规的,规律的场景中应用,便于形成日常规则统计分析. 对于学习的路径:Excel函 ...