经典颜色问题推荐博文

https://www.cnblogs.com/tyner/p/11519506.html

https://www.cnblogs.com/tyner/p/11616770.html

https://www.cnblogs.com/tyner/p/11620894.html

题意

https://www.luogu.org/problem/P4113

求一段区间中超过出现两次及以上的元素种类

分析

和其他的没啥区别,维护nxt[x], 和nxt[ nxt[x] ]即可, 还是考虑移动左端点对区间答案的影响


#include<cstdio>
#include<algorithm>
using namespace std;
#define lowbit(x) (x&-x)
const int MAX = 2000000+99;
inline int read() {
char ch = getchar(); int f = 1, x = 0;
while(ch<'0' || ch>'9') {if(ch=='-') f = -1; ch = getchar();}
while(ch>='0' && ch<='9') {x = x*10+ch-'0'; ch = getchar();}
return x*f;
} int n,c,m;
int nxt[MAX], lst[MAX], nnxt[MAX];
int arr[MAX], t[MAX]; struct node{
int l, r, id, ans;
}cmd[MAX];
bool cmp1(node a, node bb) { return a.l < bb.l;}
bool cmp2(node a, node bb) { return a.id < bb.id;} void add(int x, int k) {while(x <= n) t[x] += k, x += lowbit(x);}
int query(int x) {
int res = 0;
while(x) {res += t[x], x -= lowbit(x);}
return res;
} void pre() {
n = read(), c = read(), m = read();
for(int i = 1; i <= n; i++) arr[i] = read();
for(int i = n; i >= 1; i--) {
nxt[i] = lst[arr[i]];
lst[arr[i]] = i;
} for(int i = 1; i <= n; i++) nnxt[i] = nxt[nxt[i]];
for(int i = 1; i <= c; i++) if(lst[i] && nxt[lst[i]]) add(nxt[lst[i]], 1);//颜色数为C
//分清n,m
for(int i = 1; i <= m; i++) cmd[i].l=read(), cmd[i].r=read(), cmd[i].id = i;
sort(cmd+1, cmd+1+m, cmp1);
} void solve() {
int pos = 1;
for(int l = 1; l <= n; l++) {
while(cmd[pos].l == l) {
cmd[pos].ans = query(cmd[pos].r)-query(cmd[pos].l-1);
++pos;
}
if(nxt[l]) add(nxt[l], -1);
if(nnxt[l]) add(nnxt[l], 1);
} sort(cmd+1, cmd+1+m, cmp2);
for(int i = 1; i <= m; i++) printf("%d\n", cmd[i].ans);
} int main() {
pre();
solve();
return 0;
}

luoguP4113 [HEOI2012]采花的更多相关文章

  1. BZOJ 2743: [HEOI2012]采花

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 2056  Solved: 1059[Submit][Status ...

  2. [bzoj2743][HEOI2012]采花(树状数组+离线)

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 1832  Solved: 954[Submit][Status] ...

  3. BZOJ 2743: [HEOI2012]采花( 离线 + BIT )

    处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...

  4. BZOJ_2743_[HEOI2012]采花_离线+树状数组

    BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...

  5. BZOJ 2743: [HEOI2012]采花 离线树状数组

    2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...

  6. 【BZOJ2743】[HEOI2012]采花 离线+树状数组

    [BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...

  7. cogs:1619. [HEOI2012]采花/luogu P2056

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  8. 1619. [HEOI2012]采花

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比 时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿 ...

  9. cogs1619. [HEOI2012]采花 x

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

随机推荐

  1. 通过JTAG对比内核启动后text/rodata段内容

    关键词:vmlinux.strip.dump._text.__end_rodata等等. 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类. 这种情况下,需要确认这 ...

  2. Codeforces Round #601 (Div. 2)

    传送门 A. Changing Volume 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/19 22:37:33 */ #include ...

  3. Deepin 15.9系统直接运行exe运行程序

    以下为你介绍在深度Deepin 15.9 Linux操作系统下直接运行exe文件的方法,此方法基于deepin-wine实现,经测试,一些exe文件是可以正常打开的,但部分可能会出现无法使用的情况,但 ...

  4. mysql中group by 使用

    问题描述 我现在需要查询表test,里面需要安装字段a 进行分组.分组之后还有按照b字段最大的.还要查询出字段c. 我先在使用的数据库是mysql8.0 解决 需注意: group by 分组的时候是 ...

  5. Codeforces Round #598 (Div. 3) A. Payment Without Change 水题

    A. Payment Without Change You have a coins of value n and b coins of value 1. You always pay in exac ...

  6. Java连载45-继承举例、方法覆盖

    一.Java语言中假设一个类没有显式的继承任何类,那么该类默认继承Java SE库中提供的java.lang.Object类 1.快捷键:Ctrl + shift + T:可以在Myeclipse中查 ...

  7. 如何使用PHP的生成器yield处理大量数据业务

    官方解释yield yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大 ...

  8. for循环用了那么多次,但你真的了解它么?

    一.基础的for循环 0.使用while也是一种循环方式,此处探究for相关的循环,就不做拓展了. 1.遍历数组的时候,初学时是使用的如下样式的for循环: for(int i=0;i<a.le ...

  9. windows 下命令行启动 appium-desktop

    启动appium-desktop如果要启动appium-desktop,双击appium.exe,启动后如下图:   启动appium-server通过下面解决方案直接启动appium-server, ...

  10. C# 异或

    遗忘的东西. 真的是很少用呀. 操作符为^ 简单来说就是相同为假(0),不同为真(1). 给一个小小的例子(密文) class Program { static void Main(string[] ...