洛谷 P1972 [SDOI2009]HH的项链(树状数组,离线)
传送门
解题思路
因为是求区间的不同种类数,所以我们用树状数组(貌似并没有什么直接联系)
(...表示到)
还是和原来一样,用s[i]来表示a[i-lowbit(i)]...a[i]的种类数。
因为有一个类似于去重的操作,所以就有一个数组记录一下is[i]表示编号为i的贝壳上一次出现的地方,每一次更新结果时s[is[i]]--;s[i]++;is[i]=i。
但是我们想,假设询问的一个区间为a...b,下一个区间为a...b-5,并且x这种贝壳在b-3,b-7都出现过(a<b-7<b-5<b-3<b),那么我们在询问a...b时使s[b-7]--;然后再询问a...b-5时就会导致答案出错(少算了一个)。(解释的不太清楚,感性理解一下)
所以这里我们用到一个操作——离线,所谓离线,就是一次性把问题全部输入,根据一定的顺序排序(便于解题),保存好答案后再根据原顺序输出。
怎样用程序实现离线呢?我们可以用结构体来存储数据,每一个结构体变量中有一个保存数值,另一个保存序号,全部读入后按照数值的关键字sort一遍,输出答案前按照关键字序号再sort一遍,这样就达到了目的。
比如说这一道题:
struct ques {
int l,r,ans,id;
} q[maxn];
bool cmp1(ques a,ques b) {
return a.r<b.r;
}
bool cmp2(ques a,ques b) {
return a.id<b.id;
}
int main() {
//读入数据
sort(q+,q+m+,cmp1);//第一遍sort
//求出答案
sort(q+,q+m+,cmp2);//第二遍sort
//输出答案
return ;
}
AC代码
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=;
int s[maxn],n,a[maxn],m;
int is[maxn*];
inline int lowbit(int x) {
return x&(-x);
}
void insert(int id,int k) {
for(int i=id; i<=n; i+=lowbit(i)) {
s[i]+=k;
}
}
int query(int id) {
int res=;
for(int i=id; i>; i-=lowbit(i)) {
res+=s[i];
}
return res;
}
struct ques {
int l,r,ans,id;
} q[maxn];
bool cmp1(ques a,ques b) {
return a.r<b.r;
}
bool cmp2(ques a,ques b) {
return a.id<b.id;
}
int main() {
cin>>n;
int cnt=;
for(int i=; i<=n; i++) {
scanf("%d",&a[i]);
}
cin>>m;
for(int i=; i<=m; i++) {
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+,q+m+,cmp1);
for(int i=; i<=n; i++) {
if(is[a[i]]) {
insert(is[a[i]],-);
}
insert(i,);
is[a[i]]=i;
while(q[cnt].r==i&&cnt<=m) {
q[cnt].ans=query(q[cnt].r)-query(q[cnt].l-);
cnt++;
}
}
sort(q+,q+m+,cmp2);
for(int i=; i<=m; i++) {
printf("%d\n",q[i].ans);
}
return ;
}
洛谷 P1972 [SDOI2009]HH的项链(树状数组,离线)的更多相关文章
- 洛谷 P1972 [SDOI2009]HH的项链——树状数组
先上一波题目 https://www.luogu.org/problem/P1972 这道题是询问区间内不同数的个数 明显不是正常的数据结构能够维护的 首先考虑 因为对于若干个询问的区间[l,r],如 ...
- 【题解】P1972 [SDOI2009]HH的项链 - 树状数组
P1972 [SDOI2009]HH的项链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 \(HH\) 有一串由各种 ...
- luogu P1972 [SDOI2009]HH的项链 |树状数组 或 莫队
题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...
- 【bzoj1878】[SDOI2009]HH的项链 - 树状数组 - 离线处理
[SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4834 Solved: 2384[Submit][Status][Dis ...
- BZOJ1878: [SDOI2009]HH的项链[树状数组 离线]
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3486 Solved: 1738[Submit][Statu ...
- BZOJ1878: [SDOI2009]HH的项链[树状数组+离线 | 主席树]
题意: 询问区间不同种类颜色数 [2016-11-15] 离线好厉害 对于每一个区间询问,一个数只考虑一次,那么考虑他最后出现的一次 将询问按r排序 从1到n扫描,用树状数组维护一个位置应不应该考虑( ...
- 洛谷——P1972 [SDOI2009]HH的项链(线段树)
P1972 [SDOI2009]HH的项链 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的 ...
- 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- 洛谷 P1972 [SDOI2009]HH的项链 解题报告
P1972 [SDOI2009]HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断 ...
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
随机推荐
- 自己实现一个Redux
Redux是一个可预测的状态容器,提供可预测的状态管理. 什么是状态?状态其实也就是数据,管理状态也就是对数据的管理.那么什么是可预测的状态管理呢?能够监听数据的变化,获取变化的来源,在发生变化时可以 ...
- 在Eclipse-jee-neon中配置Hibernate(jbosstools)
以下是在eclipse上安装Hibernate的插件,hibernate在编程上坚持出现,故需要在eclipse上进行如下安装. 首先把安装Hibernate插件,常用到JBoss,访问http:// ...
- OA是Office Automation
OA是Office Automation OA是Office Automation OA是Office Automation
- 理解uboot过程中的优秀博客
To_run_away的博客 https://blog.csdn.net/qq_16777851/column/info/28098/5 加了微信好友,公众号也有文章. Camus https://c ...
- Flutter-網絡請求
Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比 ...
- django 的保护机制
- 028:with标签使用详解
with标签使用详解: 1.在模板中享用使用变量,可以通过 with 语句实现: 2.with 有两种用法,具体情况如下 ( 包括注意事项 ) : index.html: <p>wi ...
- MS4W安装教程
简介 欢迎使用MS4W,这是由Gateway Geomatics开发的快速简便的安装程序,用于为Windows及其附带应用程序(如Geomoose.MapBender.Openlayers等)设置Ma ...
- 13 October
树链剖分 http://www.lydsy.com/JudgeOnline/problem.php?id=1036 https://oi.men.ci/tree-chain-split-notes/. ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...