离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次

------------------------------------------------------------------------------------------------

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define rep( i , n ) for( int i = 0 ; i < n ; ++i )
#define clr( x , c ) memset( x , c , sizeof( x ) )
#define lowbit( x ) (x & -x)
#define Rep( i , n ) for( int i = 1 ; i <= n ; ++i )
using namespace std;
const int maxn = 50000 + 5;
const int maxq = 200000 + 5;
const int MAXN = 1000000 +5;
int b[ maxn ];
int n;
  

inline void add( int x ) {

if( ! x ) return;
for( ; x <= n ; x += lowbit( x ) )
   b[ x ] += 1;
}
inline int sum( int x ) {
int ans = 0;
for( ; x > 0 ; x -= lowbit( x ) )
   ans += b[ x ];
return ans;
}
int next[ MAXN ];
int last[ MAXN ];
int x[ maxn ];
struct Q {
int l , r;
int x;
inline void Read( int _x ) {
scanf( "%d%d" , &l , &r );
x = _x;
}
bool operator < ( const Q &rhs ) const {
return l < rhs.l;
}
};
Q q[ maxq ];
int ans[ maxq ];
int main() {
freopen( "test.in" , "r" , stdin );
clr( b , 0 );
clr( last , -1 );
clr( next , 0 );
cin >> n;
Rep( i , n ) {
scanf( "%d" , &x[ i ] );
if( last[ x[ i ] ] != -1 ) 
   next[ last[ x[ i ] ] ] = i;
else 
   add( i );
last[ x[ i ] ] = i;
}
int m;
cin >> m;
rep( i , m ) q[ i ].Read( i );
sort( q , q + m );
int s = 1;
rep( i , m ) {
while( s < q[ i ].l ) {
add( next[ s ] );
s++;
}
ans[ q[ i ].x ]= sum( q[ i ] .r ) - sum( q[ i ].l - 1 );
}
rep( i , m )
   printf( "%d\n" , ans[ i ] );
return 0;
}

------------------------------------------------------------------------------------------------

1878: [SDOI2009]HH的项链

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 2117  Solved: 1043
[Submit][Status][Discuss]

Description

HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此, 他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同 的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只好求助睿智的你,来解 决这个问题。

Input

第一行:一个整数N,表示项链的长度。 第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。 第三行:一个整数M,表示HH询问的个数。 接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。

Output

M行,每行一个整数,依次表示询问对应的答案。

Sample Input

6
1 2 3 4 3 5
3
1 2
3 5
2 6

Sample Output

2
2
4

HINT

对于20%的数据,N ≤ 100,M ≤ 1000;
对于40%的数据,N ≤ 3000,M ≤ 200000;
对于100%的数据,N ≤ 50000,M ≤ 200000。

Source

Day2

转载于:https://www.cnblogs.com/JSZX11556/p/4541099.html

BZOJ 1878: [SDOI2009]HH的项链( BIT )相关推荐

  1. BZOJ 1878: [SDOI2009]HH的项链

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 3548  Solved: 1757 [Submit][Sta ...

  2. bzoj 1878: [SDOI2009]HH的项链(主席树)

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 5317  Solved: 2624 [Submit][Sta ...

  3. bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...

  4. bzoj 1878: [SDOI2009]HH的项链

    传送门:点我 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因 ...

  5. BZOJ 1878: [SDOI2009]HH的项链 | 莫队

    题解: http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题解: 莫队板子题 核心思想是对区间的询问离线之后按照合理的顺序来优化复杂度 一般的做 ...

  6. 【BZOJ】[SDOI2009]HH的项链

    [算法]主席树||离线+树状数组 [题解] 主席树经典应用:找区间不同的数字个数. 做法:记录每个数上一次出现的位置last[i],对last建权值线段树,对于区间询问last[i]<L的数字个 ...

  7. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

  8. BZOJ-1878: [SDOI2009]HH的项链(莫队算法)

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 4857  Solved: 2401 [Submit][Sta ...

  9. bzoj1878: [SDOI2009]HH的项链

    树状数组的一类题目 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...

最新文章

  1. 【OpenCV 4开发详解】图像二值化
  2. C# winform自己实现Windows消息处理
  3. oracle导入时 ora39166,impdp ORA-39002,ORA-39166,ORA-39164的问题及解决
  4. 修改默认的pip版本为对应python2.7
  5. sql获取某列出现频次最多的值_业务硬核SQL集锦
  6. 大涨50%之后 瑞幸咖啡美股盘前再涨逾30%
  7. Anacodna 环境迁移详解
  8. retrofit content-length为0_Retrofit 源码剖析
  9. 数据之路 - Python爬虫 - Json模块与JsonPath
  10. 6.gloox 之 MessageHandler
  11. 【项目管理】项目管理发展的新阶段——PRINCE2项目管理方法
  12. java xssfworkbook_java - poi(XSSFWorkbook)读取excel(.xlsx)文件
  13. 【论文视频】对比学习论文综述【论文精读】
  14. 阿里P8手把手教你!java私塾培训
  15. malloc函数详解
  16. [译] APT分析报告:02.钓鱼邮件网址混淆URL逃避检测
  17. 多址接入技术 FDMA TDMA CDMA NOMA
  18. 机器人来了!日本保险巨头启用AI替换30%理赔部员工
  19. 音视频学习笔记1--音视频基础知识(1)
  20. 项目规范之husky lint-stated

热门文章

  1. 深度强化学习-Actor-Critic算法原理和实现
  2. 算法训练和模型部署如何避免多次重写数据预处理代码
  3. 自动驾驶路径规划论文解析(2)
  4. Android 列表视图
  5. linux应用对物理内存映射,深入理解Linux内存映射机制 (1)
  6. fossid安装教程_Win10环境下6sV2.1模型编译
  7. jmeter通过ant执行时报错 jmeter.log not found
  8. adb logcat 通过包名过滤日志并输出到txt文件
  9. mysql-5.7.17的最新安装教程
  10. 「云+未来」上海峰会,报名开启