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

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

#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. 人工智能和自然智能能否交汇?李飞飞对话斯坦福神经生物学教授Bill Newsome
  2. Linux下ipconfig分析及C语言实现
  3. oc runtime
  4. 清北学堂模拟赛d3t2 b
  5. Hadoop Hive导入数据命令
  6. activiti 设置可选处理人_新品速递|高端系列!慧明DF系列线性相位处理专业音箱处理器...
  7. 暖通空调材料进场如何验收?
  8. list集合排序-lambda表达式实现
  9. 程序员应该每年更新自己的简历
  10. 大数据技术架构_大数据架构流程图
  11. excel导入,用反射匹配字段名
  12. pycharm导入.pyt后缀文件
  13. Android传感器之光线传感器介绍
  14. 《名字竞技场 V3.0》 组队功能开放!
  15. 撒娇吧使大家啊让你撒何地什么科的你
  16. Docker 从入门到精通(0基础也能看懂的教程)
  17. JNLP文件详细说明
  18. Python 内置turtle模块 —— 画一面国旗(基础篇)
  19. html视频怎么转换成图片,WPS演示如何将图片转换成视频?
  20. 【福尔摩斯的约会】-PAT

热门文章

  1. 深度学习之主流数据库 | MySQL基础
  2. Tensorflow动态seq2seq使用总结
  3. 国土空间规划项目资料获取的途径
  4. as3 与 java_每天学一点Flash(48) As3.0 与 java 通信(1)
  5. 展望10年内VR技术的盈利模式的发展历程
  6. 8个球放入3个盒子方式_颜值与美味并存~分享几款私房盒子蛋糕做法,再也不用排队买了...
  7. uniapp中封装ajax方法
  8. 两个div在同一行且不换行
  9. CentOS安装etcd和flannel实现Docker跨物理机通信
  10. 解决mac管理员变成普通成员