题目大意

静态区间查询不同数的个数。

分析

好了,成功被这道题目拉低了AC率。。。
打了莫队T飞掉了,真的是飞掉了QwQ。
蒟蒻想不出主席树的做法,就换成了莫队。。。


很多人都不知道莫队是什么。。。
一句话概括莫队:离线询问分块排序,玄学降低复杂度


那么这道题目就是简单的莫队模板套一下就好了,每一次看看更新的点是不是会对答案造成贡献就可以过掉了。
但是复杂度很明显是\(Q(\sqrt{n}m)\),成功T掉,加上玄学卡常,破罐子破摔了100+终于过掉了。

#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
#define N 500005
#define M 1000005
using namespace std;
template <typename T>
inline void read(T &x) {
    x = 0; T fl = 1; char ch = 0;
    for (; ch < '0' || ch > '9'; ch = getchar())
        if (ch == '-') fl = -1;
    for (; ch >= '0' && ch <= '9'; ch = getchar())
        x = (x << 1) + (x << 3) + (ch ^ 48);
    x *= fl;
}
int buf[1 << 20];
template <typename T>
inline void write(T x) {
    if (x < 0) putchar('-'), x = -x;
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}
struct node {
    int l, r, bl, id;
    bool operator <(const node &rhs) const {
        return (bl == rhs.bl)? ((bl & 1)? (r < rhs.r): (r > rhs.r)): (bl < rhs.bl);
    }
}q[N];
int block, res = 0, n, m;
int clo[M], a[N], ans[N];
inline void update(register int x, register int opt) {
    clo[a[x]] += opt;
    if (opt == -1) if (clo[a[x]] == 0) res += opt;
    if (opt == 1) if (clo[a[x]] == 1) res += opt;
}
int main() {
    read(n); block = sqrt(n);
    for (register int i = 1; i <= n; ++ i) read(a[i]);
    read(m);
    for (register int i = 1; i <= m; ++ i) {
        read(q[i].l); read(q[i].r);
        q[i].bl = (q[i].l + 1) / block;
        q[i].id = i;
    }
    sort(q + 1, q + 1 + m);
    register int l = 1, r = 0;
    for (register int i = 1; i <= m; ++ i) {
        while (r < q[i].r) update(++ r, 1);
        while (r > q[i].r) update(r --, -1);
        while (l > q[i].l) update(-- l, 1);
        while (l < q[i].l) update(l ++, -1);
        ans[q[i].id] = res;
    }
    for (register int i = 1; i <= m; ++ i) write(ans[i]), putchar('\n');
    return 0;
}

[luogu1972][bzoj1878][SDOI2009]HH的项链【莫队+玄学卡常】的更多相关文章

  1. BZOJ1878 [SDOI2009] HH的项链 [莫队,卡常]

    BZOJ传送门,洛谷传送门 HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义. ...

  2. [BZOJ1878][SDOI2009]HH的项链 莫队

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1878 不带修改的莫队,用一个桶记录一下当前区间中每种颜色的数量就可以做到$O(1)$更新了 ...

  3. BZOJ1878[SDOI2009]HH的项链+莫队算法模板

    题意:多次询问,求在一个区间中,有多少种珠子: 思路:莫队算法模板题目: 参考:https://www.cnblogs.com/RabbitHu/p/MoDuiTutorial.html #inclu ...

  4. [bzoj1878][SDOI2009][HH的项链] (莫队算法)

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...

  5. Bzoj 1878: [SDOI2009]HH的项链 莫队

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2717  Solved: 1363[Submit][Statu ...

  6. [SDOI2009] HH的项链 | 莫队模板

    题目链接:戳我 题意:求区间中不同颜色的种类数 因为是要过知识点,所以又把这题拿出来做了一遍......这里就写两种方法吧 主席树做法 设pre[i]为第i个点上的颜色在前面序列中出现的最晚的一次的位 ...

  7. P1972 [SDOI2009]HH的项链 莫队or树状数组

    用什么树状数组莫队多帅 思路:树状数组\(or\)莫队(其实还是推荐树状数组\(QwQ\)) 提交:我告诉你我卡了一会儿常 卡不满原因:没有用奇偶性排序 题解: 莫队: 就是裸的莫队,把询问排序\(e ...

  8. BZOJ1878 SDOI2009 HH的项链 【莫队】

    BZOJ1878 SDOI2009 HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的 ...

  9. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

随机推荐

  1. 单列模式,装饰器、new方法、类/静态方法实现单列模式

    一.单列模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 C ...

  2. Ajax中文乱码的解决

    网上有很多解决Ajax中文乱码的例子,昨晚弄了很久,最终确定一种“确实”有效地方法.首先我有必要说明一下我遇到的情况:有一个注册页面,注册用户填完信息并提交后,页面获得信息并通过java servle ...

  3. use redis instance in docker hub

    redis - Docker Hubhttps://hub.docker.com/_/redis

  4. opencv2\core\cuda.hpp(106): error C2059: 语法错误:“常量”

    在 cuda.hpp 中, virtual void free(GpuMat* mat) = 0;   -> virtual void _free(GpuMat* mat) = 0;

  5. text-decoration、text-decoration-color、text-decoration-line、text-decoration-style属性

    text-decoration:over-line  定义上划线 text-decoration:line-through  定义删除线 text-decoration:underline  定义下划 ...

  6. [转帖]web安全:QQ号快速登录漏洞及被盗原理

    web安全:QQ号快速登录漏洞及被盗原理 https://www.cnblogs.com/1996V/p/7481823.html 看了下 QQ的确监听 端口 大神牛B 自己这一块一直没深入学习过.. ...

  7. select into赋值方式

    declare v_price ,);--单价 v_usenum number;--水费字数 v_usenum2 number;--使用吨数 begin v_price:=2.45;--每吨单价 -- ...

  8. spring后置处理器BeanPostProcessor

    BeanPostProcessor的作用是在调用初始化方法的前后添加一些逻辑,这里初始化方法是指在配置文件中配置init-method,或者实现了InitializingBean接口的afterPro ...

  9. Java——scoket通讯

    Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket是TCP/IP协议通信的抽象层,所以我们还需要了解TCP协议 传输层协议 TCP: ...

  10. vscode git设置

    vscode只能打开一下界面: 在setting.path增加git.path选项,再使用linux的方法配置路径,就是使用D:/../bin/git.exe而不是\\ 重启vscode,git设置即 ...