HH的项链——题解
题目描述

直接求解会导致不同贝壳在上个区间算过但这个区间没标记的情况,所以在求解时要把上个区间的标记转移到这个区间
转移前先右边界由小到大排序,然后转移上个右边界到这个右边界的标记,同时记录上个标记出现的地方,方便转移
下面附代码
solution
#include<bits/stdc++.h>
using namespace std;
int a[10000000],c[10000000],ans[10000000],n,t,l,r,now;
int vis[10000000];
int lowbit(int x){
return x&(-x);
}
void add(int i,int k){
while(i<=1e6){
c[i]+=k;
i+=lowbit(i);
}
}
int getsum(int i){
int res=0;
while(i>0){
res+=c[i];
i-=lowbit(i);
}
return res;
}
struct lsx{
int l,r,data;
}m[10000000];
bool cmp(lsx aa,lsx b){
return aa.r<b.r;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&t);
for(int i=1;i<=t;i++){
scanf("%d%d",&m[i].l,&m[i].r);
m[i].data=i;
}
sort(m+1,m+t+1,cmp);
now=1;
for(int i=1;i<=t;i++){
for(int j=now;j<=m[i].r;j++){
if(vis[a[j]]) add(vis[a[j]],-1);//删除上个区间的标记,防止前缀和多算
add(j,1);
vis[a[j]]=j;// 上一次这个数出现位置;
//循环为了将前面出现过的数的标记转移到所求区间内,再树状数组求前缀和;
}
now=m[i].r+1;
ans[m[i].data]=getsum(m[i].r)-getsum(m[i].l-1);
}
for(int i=1;i<=t;i++){
printf("%d\n",ans[i]);
}
return 0;
}
HH的项链——题解的更多相关文章
- HH的项链题解(离线思想+链表+树状数组)
本人第一篇博客重磅推出!!! 希望各位朋友以后多多捧场也多给写意见(我个人喜欢把题解写得啰嗦一点,因为这样方便理解,各位巨佬勿喷) 来讲一道提高+/省选-的骚题:HH的项链(这个HH你理解成皇后呵呵哈 ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- BZOJ1878:[SDOI2009]HH的项链——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题面源于洛谷 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的 ...
- 洛谷 P1972 HH的项链 题解
题面 本题其实主要就这几点: 1.离线,以右端点排序(从小到大); 2.建立树状数组c[],c[i]表示从1~i中有多少种不同的数字: 3.对于每次查询的答案就是sum(r)-sum(l-1); 4. ...
- BZOJ1878 洛谷1972 HH的项链题解
洛谷链接 BZOJ链接 看到这样不用修改的题目,应该佷容易就联想到了离线来处理. 我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置 我们用next[i]表示i处颜色之前 ...
- 【题解】P1972 [SDOI2009]HH的项链 - 树状数组
P1972 [SDOI2009]HH的项链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 \(HH\) 有一串由各种 ...
- 【BZOJ1878】[SDOI2009]HH的项链 离线BIT
1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...
- Codevs 2307[SDOI2009]HH的项链
同题: Codevs 2307 HH的项链 BZOJ 1878 HH的项链 洛谷 1972 HH的项链 2009年省队选拔赛山东 时间限制: 1 s 空间限 ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- Bzoj 1878: [SDOI2009]HH的项链 莫队
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2717 Solved: 1363[Submit][Statu ...
随机推荐
- 队列(ArrayQueue)
队列是一种 先进先出(First In First Out,FILO) 的种线性数据结构 . 代码是在动态数组二次封装,先阅读底层实现体验更佳 Array.h 点它 代码清单 #ifndef C___ ...
- RPM打包教程
一.rpm是什么 rpm是一种安装包的格式.就像在Windows系统上我们常见的安装包格式是exe和msi一样,在linux上常见的安装包格式是deb和rpm.一般在红帽系列的系统上,不支持deb,所 ...
- Python smtp发送邮件怎么设置抄送人
设置抄送人,非常简单,只需要添加一条信息就可以了,例: cc_list = ['xx@xxx.cn', 'xx@xxx.cn'] msg['Cc'] = ','.join(cc_list) smtp. ...
- mysql 必知必会整理—触发器[十五]
前言 现在很多都是程序用于触发的,而不是触发器了. 正文 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行, ...
- redis 简单整理——持久化之RDB[十九]
前言 简单介绍一下redis的持久化.先来整理一下RDB. 正文 redis 支持RDB 和 AOF两种持久化机制,他们能达到的效果不一致. 那么先来看一下RDB吧. RDB 是把当前进程数据生成快照 ...
- arp 的基础概念
前言 打算整理网络这一块,先把概念写完. 就是有一个问题,那就是为什么有ip地址还有mac地址呢? 原因是这样子的,我们知道ip协议是第三层,那么有一个问题了,如果只有第三层的ip是否能过识别到主机? ...
- xilinx的serdes接收时钟坑
ilinx的7 series fpga transceivers wizard用于自定义的serdes编码. 要选择多个serdes端口,如下图,点击对应的名称,然后右边选择use该设备就可以. 生成 ...
- asyncio和aiohttp携程并发
import asyncio from aiohttp import web import time async def process(): for i in range(10): print(&q ...
- 前端直接获取用户IP的方法
前端直接获取用户IP的方法 简单来说就是使用两个接口 一个是太平洋网 <script src="//whois.pconline.com.cn/ipJson.jsp?callback= ...
- 力扣273(java)-整数转换英文表示(困难)
题目: 将非负整数 num 转换为其对应的英文表示. 示例 1: 输入:num = 123输出:"One Hundred Twenty Three"示例 2: 输入:num = 1 ...