1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链
Time Limit: 4 Sec Memory Limit: 64 MB
Submit: 4420 Solved: 2199
[Submit][Status][Discuss]
Description
Input
Output
M行,每行一个整数,依次表示询问对应的答案。
Sample Input
1 2 3 4 3 5
3
1 2
3 5
2 6
Sample Output
2
4
//离线算法的话,比较好写,树状数组,或线段树维护一个前缀和
在线算法听说是主席树,目前还不会,以后会了,一定更
离线树状数组,思路是,先对贝壳数组模拟一个链表,nex[i] 记录每个位置右边最近的与该位置贝壳种类相同的贝壳的位置。
然后,pos[i] 记录 i 种类的贝壳最靠左的位置,然后,对每个存在种类的贝壳的最靠左位置(就是pos[i]),建一个树状数组,位置上有最靠左的贝壳就是 1 ,否则是0,这样是为了统计区间内的种类数!
然后,所有查询按左端点排序,枚举左端点,靠前面的链表更新树状数组,求前缀和。
其实感觉最大的耗时在于对询问的排序。。。mlog(m)
/**************************************************************
Problem: 1878
User: happy_code
Language: C++
Result: Accepted
Time:1780 ms
Memory:8908 kb
****************************************************************/ #include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MXN 50005
#define MXM 200005
struct Que
{
int l,r;
int id;
int ans;
}q[MXM]; int n,m;
int a[MXN];
int pos[];
int nex[MXN];
int tree[MXN]; int lowbit(int x){return x&(-x);}
bool cmp1(const Que &a,const Que &b)
{
return a.l<b.l;
}
bool cmp2(const Que &a,const Que &b)
{
return a.id<b.id;
} void update(int x,int k)
{
for (int i=x;i<=n;i+=lowbit(i))
tree[i]+=k;
} int query(int x)
{
int res=;
for (int i=x;i>;i-=lowbit(i))
res+=tree[i];
return res;
} int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
for (int i=n;i>;i--)
{
nex[i]=pos[a[i]];
pos[a[i]]=i;
}
for (int i=;i<;i++) //初始化
if (pos[i]) update(pos[i],); scanf("%d",&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); int l=;
for (int i=;i<m;i++)
{
while (l<q[i].l)
{
if (nex[l]) update(nex[l],);
l++;
}
q[i].ans = query(q[i].r)-query(q[i].l-);
} sort(q,q+m,cmp2);
for (int i=;i<m-;i++)
printf("%d\n",q[i].ans);
printf("%d\n",q[m-].ans);
return ;
}
1878: [SDOI2009]HH的项链的更多相关文章
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Statu ...
- 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 ...
- BZOJ 1878: [SDOI2009]HH的项链( BIT )
离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...
- BZOJ 1878 [SDOI2009]HH的项链 【莫队】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 1878: [SDOI2009]HH的项链 Time Limit: 4 Sec M ...
- BZOJ 1878 [SDOI2009]HH的项链 (主席树 或 莫队算法)
题目链接 HH的项链 这道题可以直接上主席树的模板 #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) ...
- 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...
- bzoj 1878 [SDOI2009]HH的项链(离线处理+BIT)
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...
- 1878. [SDOI2009]HH的项链【线段树 或 莫队】
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...
随机推荐
- java 发送html邮件,苹果或者某些邮件客户端收到的内容为空白解决方案
需要把网页标签中的双引号替换为 " 或者 \\\" 例如 <div id=\\\"container\\\" style=\\\"widt ...
- ROS示例----导航功能包Husky_exploration
ROS导航功能包示例husky amcl gmapping slam exploration 此功能包包含如下文件: 结构如下: $ tree -L 2 . ├── CMakeLists.txt -& ...
- 使用svn hooks 脚本post-commit时遇到的故障
由于网站上线,需要把新添加功能上传到测试环境进行测试,但由于程序员每天有大量的修改,如果总是登陆服务器手动更新svn工作副本(测试环境)太耗时耗精力,进而增加svn进行commit时,测试环境即时更新 ...
- redis主从和主从切换
redis数据量增加,导致内存不够用,要迁移分离redis和程序: 1. 在新redis服务器上,启动一个redis实例,配置和master配置一致,不同的是配置文件中修改并启用 slave-read ...
- angular4 开发记录
1,传值问题 page setValue: [routerLink]="['/product-details', product.id]"> ts seValue: ...
- kafka consumer assign 和 subscribe模式差异分析
转载请注明原创地址:http://www.cnblogs.com/dongxiao-yang/p/7200971.html 最近需要研究flink-connector-kafka的消费行为,发现fli ...
- javascript (function() { /* code */ })() 自执行函数
(function(){ function a(){ alert("a"); } })(); 自执行匿名函数: 常见格式:(function() { /* code */ })() ...
- Linux下查看硬件信息的方法
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart) 查看CPU信息:cat /proc/cpuinfo 查看板卡信息:cat /proc/pci 查 ...
- __attribute__系列之aligned
__attribute__的属性aligned,作用是为了设置字节对齐. aligned是对 变量和结构体进行 字节对齐的属性设置. 通过aligned属性设置(aligned(对齐字节数)),可以显 ...
- 没有局域网环境,全是公网IP可以做LVS吗,该如何做了!请大家赐教!
没有局域网环境,全是公网IP可以做LVS吗,该如何做了!请大家赐教! 由 wjjava 在 周四, -- : 提交 LVS集群 现在有3台服务器,各有一个公网IP地址.IP地址形式如下: IP1:12 ...