BZOJ1878 洛谷1972 HH的项链题解
看到这样不用修改的题目,应该佷容易就联想到了离线来处理。
我们发现若将询问按照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的项链题解的更多相关文章
- 洛谷 P1972 HH的项链 题解
题面 本题其实主要就这几点: 1.离线,以右端点排序(从小到大); 2.建立树状数组c[],c[i]表示从1~i中有多少种不同的数字: 3.对于每次查询的答案就是sum(r)-sum(l-1); 4. ...
- 洛谷1972 HH的项链 树状数组查询区间内不同的数的数量
题目链接:https://www.luogu.com.cn/problem/P1972 题意大致是:给定一个序列长度为n,给出m个查询区间,要求响应是区间内不同的数的个数.为此我们考虑到树状数组的区间 ...
- [洛谷 P1972] HH的项链(SDOI2009)
P1972 [SDOI2009]HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断 ...
- 洛谷P1972 HH的项链
传送门啦 分析: 题目描述不说了,大意是,求一段区间内不同元素的种数. 看到区间,我们大概先想到的是暴力(然后炸掉).线段树.树状数组.分块. 下面给出的是一种树状数组的想法. 首先,对于每一段区间里 ...
- 洛谷P1972 HH的项链【树状数组】
题目:https://www.luogu.org/problemnew/show/P1972 题意:给定一个长度为n的序列,数字表示珠子的种类.m次查询每次询问给定区间内珠子的种类数. 思路:可以说是 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
随机推荐
- 啊啊我找不到web.xml怎么办呀~~
创建Dymamic Web Project的时候不要忘记勾选这玩意(about servlet) 其实还有一个办法就是右键点击你的web项目名--->Java EE Tools-->Gen ...
- layui -page 分页类
<?phpnamespace page; // +---------------------------------------------------------------------- / ...
- Faster RCNN 的细节补充
一.faster rcnn的结构 通过上面的结构,我们知道该faster rcnn前面以VGG16为框架,加入RPN层,最后做分类层. 采用VGG16相对ZF来说慢一点,但是精度也高一点. 二.RPN ...
- memcache 拓展
需要安装Libevent.memcached.memcache. 参考网址:https://www.cnblogs.com/hejun695/p/5369610.html 启动:/usr/local/ ...
- Codeforces 220B
B. Little Elephant and Array time limit per test 4 seconds memory limit per test 256 megabytes input ...
- Cannot allocate memory for the buffer pool
优化了一通,启动不了 直接上日志 innodb_buffer_pool_size”.”key_buffer_size” 的大小设置,适当的调大内存分配,减小,然后保存配置文件,重新尝试启mysql 成 ...
- spring springmvc 展示图片,静态资源的处理
jsp中显示一张照片 <img alt="静态图片" src="static/目录.png"> 然后在springmvc的配置中加上 <!-- ...
- Twitter web information
http://developer.51cto.com/art/201307/404612.htm 150M active users 300K Qps (read, only 6000 write/s ...
- Slackware网卡配置文件和配置工具
Slackware 有关网卡的配置文件是/etc/rc.d/rc.inet1.conf , 这个文件包括乙太网接口的网卡和无线网卡的配置.Slackware 还是比较纯净的,网络配置也较简单:在Sla ...
- 洛谷P1968 美元汇率[2017年4月计划 动态规划02]
P1968 美元汇率 题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能 ...