洛谷链接

BZOJ链接

看到这样不用修改的题目,应该佷容易就联想到了离线来处理。

我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置

我们用next[i]表示i处颜色之前出现的位置,我们利用树状数组维护每个数最后一次出现的位置小于j的个数,每次的答案就是树状数组l到r这一段的和

显然,next[i]处对答案已经不会产生贡献了,我们就可以将这个贡献减掉

然后再将i处对答案的贡献加入

# include<iostream>
# include<cstdio>
# include<cmath>
# include<algorithm>
using std::sort;
const int mn = ;
const int maxn = ;
inline int read()
{
int x=;
char ch=getchar();
while(ch>'' || ch<'') ch=getchar();
while(ch>='' && ch<='') {x=x*+ch-'';ch=getchar();}
return x;
}
int n,m;
int nxt[],ans[maxn],tmp[];
int T[mn];
//nxt[i]表示在i处的颜色上一次出现的位置
void add(int x,int val)
{
while(x<=n)
{
T[x]+=val;
x+=(x&-x);
}
}
int sum(int x)
{
int ret=;
while(x>)
{
ret+=T[x];
x-=(x&-x);
}
return ret;
}
struct ask{int l,r,id;};
ask b[maxn];
bool cmp(ask x,ask y)
{
return x.r<y.r;
}
int main()
{
int x;
n=read();
for(int i=;i<=n;i++)
{
x=read(),nxt[i]=tmp[x],tmp[x]=i;
}
m=read();
for(int i=;i<=m;i++)
b[i].l=read(),b[i].r=read(),b[i].id=i;
sort(b+,b++m,cmp);
int l=;
for(int i=;i<=m;i++)
{
while(l<=b[i].r)
{
//若上一次出现过,要把上一次统计的结果减掉
if(nxt[l])
add(nxt[l],-);
add(l,);
l++;
}
ans[b[i].id]=sum(b[i].r)-sum(b[i].l-);
}
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
return ;
}

BZOJ1878 洛谷1972 HH的项链题解的更多相关文章

  1. 洛谷 P1972 HH的项链 题解

    题面 本题其实主要就这几点: 1.离线,以右端点排序(从小到大); 2.建立树状数组c[],c[i]表示从1~i中有多少种不同的数字: 3.对于每次查询的答案就是sum(r)-sum(l-1); 4. ...

  2. 洛谷1972 HH的项链 树状数组查询区间内不同的数的数量

    题目链接:https://www.luogu.com.cn/problem/P1972 题意大致是:给定一个序列长度为n,给出m个查询区间,要求响应是区间内不同的数的个数.为此我们考虑到树状数组的区间 ...

  3. [洛谷 P1972] HH的项链(SDOI2009)

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

  4. 洛谷P1972 HH的项链

    传送门啦 分析: 题目描述不说了,大意是,求一段区间内不同元素的种数. 看到区间,我们大概先想到的是暴力(然后炸掉).线段树.树状数组.分块. 下面给出的是一种树状数组的想法. 首先,对于每一段区间里 ...

  5. 洛谷P1972 HH的项链【树状数组】

    题目:https://www.luogu.org/problemnew/show/P1972 题意:给定一个长度为n的序列,数字表示珠子的种类.m次查询每次询问给定区间内珠子的种类数. 思路:可以说是 ...

  6. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  7. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  8. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  9. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

随机推荐

  1. hdu 1059 Dividing(多重背包优化)

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. poj 1269 Intersecting Lines(判断两直线关系,并求交点坐标)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12421   Accepted: 55 ...

  3. java并发系列(七)-----ConcurrentHashMap原理分析(JDK1.8)

    JDK1.8的实现已经摒弃了Segment的概念,而是直接用Node数组+链表+红黑树的数据结构来实现,并发控制使用Synchronized和CAS来操作,整个看起来就像是优化过且线程安全的HashM ...

  4. POSTMAN调试接口post对象

    APP回传设备信息,设备信息对象里边包含以下字段 后台是java ssh接收 用对象属性自动封装比较方便 所以,使用 方式进行回传 而不是使用网上说的 设置如下图

  5. CSS 定位 (Positioning)

    CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多 ...

  6. 一致性Hash算法原理,java实现,及用途

    学习记录: 一致性Hash算法原理及java实现:https://blog.csdn.net/suifeng629/article/details/81567777 一致性Hash算法介绍,原理,及使 ...

  7. 序列化form表单

    // 序列化JSON字符串 $.fn.serializeObject = function () { let o = {}; let a = this.serializeArray(); $.each ...

  8. day18 10.使用ThreadLocal来解决问题

    ThreadLocal是一个容器/集合,是一个Map集合.不管你跨多少层,只要你是同一个线程就可以取出来.Service和Dao是同一个线程.Service第一次调用JdbcUtils.getConn ...

  9. 【模板】倍增LCA [2017年5月计划 清北学堂51精英班 Day3]

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

  10. golang之Sprintf函数