题目大意:给定一个长度为$n$的序列$a_i$,$m$次询问,每次询问$[l,r]$,求在区间内有多少个数出现了至少2次。

数据范围:$1\leq l\leq r\leq n\leq 2*10^6,1\leq m,a_i\leq 2*10^6$


首先我们考虑设$pre_i$表示上一个与$a_i$相等的位置。

所以$a_i$对答案有贡献当且仅当$l\leq pre_i<i\leq r$

这是一个经典的二维数点问题,cdq分治可以解决,但是。。。

所以我们换一种更优的做法,我们每次遍历到一个位置$a_i$的时候,考虑如果$l\leq pre_i<i\leq r$的时候,$i$会有贡献。

设$c_i$表示当前每个位置的贡献,所以对于上面的情况,令$c_{pre_{pre_i}}--,c_{pre_i}++$,因为这时之前要求$l\leq pre_{pre_i}$,现在只用$l\leq pre_i$了。

如果$r=i$,那么答案就是$\sum_{i=l}^rc_i$。所以可以离线下来之后用树状数组维护。

 #include<bits/stdc++.h>
#define Rint register int
using namespace std;
const int N = ;
int n, mx, m, a[N], num[N], lst[N], ans[N], now = ;
struct Query {
int l, r, id;
inline bool operator < (const Query &o) const {return r < o.r;}
} q[N];
int c[N];
inline int lowbit(int x){return x & -x;}
inline void change(int pos, int val){
while(pos <= n){
c[pos] += val;
pos += lowbit(pos);
}
}
inline int query(int pos){
int res = ;
while(pos){
res += c[pos];
pos -= lowbit(pos);
}
return res;
}
int main(){
scanf("%d%d%d", &n, &mx, &m);
for(Rint i = ;i <= n;i ++){
scanf("%d", a + i);
lst[i] = num[a[i]];
num[a[i]] = i;
}
for(Rint i = ;i <= m;i ++){
scanf("%d%d", &q[i].l, &q[i].r);
q[i].id = i;
}
sort(q + , q + m + );
for(Rint i = ;i <= m;i ++){
while(now <= q[i].r){
if(lst[now]) change(lst[now], );
if(lst[lst[now]]) change(lst[lst[now]], -);
++ now;
}
ans[q[i].id] = query(q[i].r) - query(q[i].l - );
}
for(Rint i = ;i <= m;i ++)
printf("%d\n", ans[i]);
}

Luogu4113

Luogu4113 [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. ILMerge参考文档

    ILMerge Michael BarnettResearch in Software Engineering (RiSE)Microsoft ResearchCopyright © Microsof ...

  2. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  3. java 利用jsoup 爬取知乎首页问题

    今天学了下java的爬虫,首先要下载jsoup的包,然后导入,导入过程:首先右击工程:Build Path ->configure Build Path,再点击Add External JARS ...

  4. IDEA中添加servlet的jar

    问题解决:办法1:使用Project Structure 方法二:使用Maven 在pom.xml文件中添加如下

  5. [wordpress]WordPress地址(URL)错误,修改解决方案

    本人在修改Wordpress地址(URL)时,误操作使URL指向错误,后台无法进入. 解决方案 1.先利用Putty登陆到自己的服务器上(这里登陆方法我不再赘述): 2.登陆MySqL,并输入密码: ...

  6. 转载:使用Tornado+Redis维护ADSL拨号服务器代理池

    我们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以 ...

  7. java 图片裁剪

    图片裁剪功能,我一直以为是前端那边去做,后台不用做过多的考虑,现在我发现,前端去做裁剪好像不是太理想,我在这里简单地介绍一下我们大java的裁剪功能 前端只需要上传,x (x轴),y(y轴) , h( ...

  8. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  9. Android中的WeakReference 弱引用

    WeakReference 弱引用 定义:弱引用,与强引用(我们常见的引用方式)相对:特点是:GC在回收时会忽略掉弱引用对象(忽略掉这种引用关系),即:就算弱引用指向了某个对象,但只要该对象没有被强引 ...

  10. DWM1000 定位上位机软件 以及 源码下载

    蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 正文: 经过一段学习,今天终于将定位软件编译成功,简单修改,可以正确读取串口的数据了. 主要修改点: 1 官方 ...