#树状数组#洛谷 4113 [HEOI2012]采花
分析
与HH的项链类似
离线处理询问,按右端点排序,维护最近的颜色和第二近的颜色,修改以第二近的颜色为准
换句话说,若最近颜色的位置为\(pos2\),第二近颜色的位置为\(pos1\)
加入一个颜色\(j\)时,将\(pos1\)更新为\(pos2\),将\(pos2\)更新为\(j\),注意树状数组删除\(pos1\),添加\(pos2\)
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=2000011; struct rec{int l,r,rk;}b[N];
int n,m,ans[N],a[N],c[N],pos1[N],pos2[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
bool cmp(rec t1,rec t2){return t1.r<t2.r;}
inline void add(int x,int y){for (;x<=n;x+=-x&x) c[x]+=y;}
inline signed query(int l,int r){
rr int ans=0; --l;
for (;r>l;r-=-r&r) ans+=c[r];
for (;l>r;l-=-l&l) ans-=c[l];
return ans;
}
signed main(){
n=iut(),iut(),m=iut();
for (rr int i=1;i<=n;++i) a[i]=iut();
for (rr int i=1;i<=m;++i) b[i]=(rec){iut(),iut(),i};
sort(b+1,b+1+m,cmp); rr int now=1;
for (rr int i=1;i<=m;++i){
for (rr int j=now;j<=b[i].r;++j)
if (!pos2[a[j]]) pos2[a[j]]=j;
else if (!pos1[a[j]]) add(pos2[a[j]],1),pos1[a[j]]=j;
else add(pos2[a[j]],-1),add(pos1[a[j]],1),
pos2[a[j]]=pos1[a[j]],pos1[a[j]]=j;
now=b[i].r+1,ans[b[i].rk]=query(b[i].l,b[i].r);
}
for (rr int i=1;i<=m;++i) print(ans[i]),putchar(10);
return 0;
}
#树状数组#洛谷 4113 [HEOI2012]采花的更多相关文章
- 树状数组 洛谷P3616 富金森林公园
P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...
- 洛谷P4113 [HEOI2012]采花
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- P3374 【模板】树状数组 1--洛谷luogu
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- P3368 【模板】树状数组 2--洛谷luogu
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- 【洛谷P4113】采花 HH的项链+
题目大意:静态统计序列区间中出现次数大于等于 2 的颜色数. 题解:类似于HH的项链,只需将 i 和 pre[i] 的关系对应到 pre[i] 和 pre[pre[i]] 的关系即可. 代码如下 #i ...
- [洛谷P5216]DLS 采花
题目大意:有$n$个数,任意排列,排列后第$i$个数会产生贡献当且仅当$1\sim i-1$中的数不是它的因子,问所有排列的贡献和 题解:发现一个数要产生贡献要求所有它的因子在它的右边,设有$cnt_ ...
- HDU1166 敌兵布阵(树状数组)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)
洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...
- [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?
其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...
- BZOJ_2743_[HEOI2012]采花_离线+树状数组
BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...
随机推荐
- 面向对象之封装,类的相关操作,私有成员删除,构造方法__init__---day20
1.面向对象之封装 # ### 面向对象oop -封装 """ 类中封装: 成员属性 成员方法 封装等级: 1.公有:公有成员既能够在类外调用,也可在类内调用 2.私有: ...
- pyqt5中通过pycharm配置designer(win和mac都适用,修改下designer目录路径即可)
安装 pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douba ...
- Kotlin 基础入门
目录 一.基础语法 1.1 常见数据类型 1.2 变量 1.2.1 变量声明 1.2.2 类型推断 1.2.3 Null 安全 1.2.4 面向对象语言 1.3 流程控制 1.3.1 if 表达式 1 ...
- 无法加载 DLL“librdkafka”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
我这个错误是在引用了封装kafka项目的情况下提示的. 解决方案:在本项目里面安装 RdKafka ,再次运行就好了.
- 矩池云如何自定义端口,访问自己的web项目
本文将给您介绍如何在矩池云租用服务器的时候自定义端口,并将您的 web 项目部署到自定义端口,最后实现在本地通过自定义端口对应链接访问服务. 上传代码和数据 首先,您需要将本地的项目代码和数据上传到矩 ...
- 第135篇:Three.js基础入门
好家伙,这东西太帅了,我要学会 先放张帅图(都是用three.js做出来的,这我学习动力直接拉满) 还有另外一个 Junni is... 帧数太高,录不了 开始学习 官方文档 1.Thr ...
- JS3-高级事件
获取事件和处理事件的第二种方式:事件监听 如何获取和处理鼠标与键盘的基本事件? 事件监听方式 eventTarget.addEventListener(type,listener[,useCaptur ...
- vscode 批量函数前加const 正则表达式替换
需求 有200多个函数,我要在前面加const devService_importCertificate_result = function (args) { 方案 vscode 替换 打开正则的图标 ...
- git 全局用户名改为英文,中文生成的git记录文件 不能有中文,现场反馈 git config user.name
设置用户名和邮箱 git config --global user.name "username" git config --global user.email useremail ...
- C#获取Description特性的扩展类
C#中Description特性主要用于枚举和属性,方法比较简单,记录一下以便后期使用. 扩展类DescriptionExtension代码如下: using System; using System ...