\(\text{Solution}\)

莫队配合 \(\text{bitset}\)

发现答案困难的部分在于同一个数在三个区间出现次数的最小值

考虑强行拆开看,用莫队处理出每个区间每个数的出现次数,这个可以用 \(\text{bitset}\)

然后取 \(\min\) 相当于每个询问涉及的三个区间的 \(\text{bitset}\) 并起来

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <bitset>
#define IN inline
using namespace std; template <typename T>
IN void read(T &x) {
x = 0; char ch = getchar(); int f = 0;
for(; !isdigit(ch); f = (ch == '-' ? 1 : f), ch = getchar());
for(; isdigit(ch); x = (x<<3)+(x<<1)+(ch^48), ch = getchar());
if (f) x = ~x + 1;
} typedef long long LL;
const int N = 1e5 + 3;
int a[N], n, m, B, cnt[N], ans[N], num, now, b[N];
struct Que{int l, r, id;}Q[N];
IN bool cmp(Que a, Que b){return (a.l / B ^ b.l / B) ? (a.l < b.l) : ((a.l / B & 1) ? a.r < b.r : a.r > b.r);}
bitset<N> S[N / 3 + 2], cur; IN void add(int x){cur.set(a[x] + cnt[a[x]]), ++cnt[a[x]];}
IN void del(int x){--cnt[a[x]], cur.reset(a[x] + cnt[a[x]]);}
IN void solve() {
B = n / sqrt(2.0 * num / 3) + 1, cur.reset();
for(int i = 1; i <= n; i++) cnt[i] = 0;
for(int i = 1; i <= now; i++) S[i].set();
sort(Q + 1, Q + num + 1, cmp);
for(int i = 1, l = 1, r = 0; i <= num; i++) {
while (l > Q[i].l) add(--l);
while (r < Q[i].r) add(++r);
while (l < Q[i].l) del(l++);
while (r > Q[i].r) del(r--);
S[Q[i].id] &= cur;
}
for(int i = 1; i <= now; i++) printf("%d\n", ans[i] - (int)S[i].count() * 3);
} int main() {
read(n), read(m);
for(int i = 1; i <= n; i++) read(a[i]), b[i] = a[i];
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
num = now = 0;
for(int i = 1; i <= m; i++) {
ans[++now] = 0;
for(int j = 0; j < 3; j++)
++num, read(Q[num].l), read(Q[num].r), ans[Q[num].id = now] += Q[num].r - Q[num].l + 1;
if (now == m / 3 || i == m) solve(), num = now = 0;
}
}

最新文章

  1. .net资源链接
  2. WPF,Silverlight与XAML读书笔记第四十五 - 外观效果之模板
  3. Oracle10g_Dataguard__161031
  4. 【转】数据预处理之独热编码(One-Hot Encoding)
  5. 安装Ubuntu 16.04后要做的事
  6. Python学习(17)异常处理
  7. IOS 学习笔记(4) 控件 标签(UILabel)的使用方法
  8. 《Javascript高级程序设计》读书笔记之闭包
  9. 面向切面编程(Aop)
  10. I/O-----字符输入流
  11. Revisiting Network Support for RDMA
  12. vue-cli3.0怎么修改端口?
  13. thymeleaf(二)
  14. ubuntu server资料
  15. 【Docker】容器操作(转)
  16. Android 9 patch 图片 (.9.png 格式图片) 的特点和制作(转)
  17. 【php+微擎】微擎学习相关帮助推荐
  18. FreeSWITCH呼叫参数之sip_cid_type
  19. python读取文件行号和内容的便捷方法
  20. jenkins使用时出现的问题!

热门文章

  1. SpringBoot2.5.1+Mybatis-Plus3.4.3:(Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required)
  2. oracle 分析函数——ration_to_report 求占有率(百分比)
  3. L1-049 天梯赛座位分配 (20分)
  4. List排序(降序)
  5. 第一篇:前端基础之HTML
  6. Linux基础守护进程、高级IO、进程间通信
  7. Proxmark3 Easy 如何流畅的在Linux中操作?
  8. flutter系列之:flutter中listview的高级用法
  9. win10 WSL2问题解决“WslRegisterDistribution failed with error: 0x800701bc”
  10. SSM框架——整合ssm