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不断地收集新的贝壳,因此他的项链变得 ...
随机推荐
- 输入N,打印如图所看到的的三角形(例:N=3,N=4,N=5)1<=N<=26
package demo; public class PrintDemo { public static void main(String[] args) { print(26); } private ...
- S2S3H4 整合代码示例
主要代码列举: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app versi ...
- [1-2] 把时间当做朋友(李笑来)Chapter 2 【开启自己的心智】 摘录
心智是可培养的.可发展的.甚至是可以重建的 早意识到,早些培养可以让自己起步更早些 审视一下我们自己,运用自己的心智,我们会知道每个人可以把自己划分为两部分:自己知道的与自己并不知道的.我们有的时候并 ...
- <转>多线程中的lua同步问题
转自 http://www.cnblogs.com/ghost240/p/3526185.html 最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运 ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- 初识Quartz(二)
简单作业: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package quartz_pr ...
- Windows Server 2008 R2入门之用户管理
一.用户账户概述: ”用户”是计算机的使用者在计算机系统中的身份映射,不同的用户身份拥有不同的权限,每个用户包含一个名称和一个密码: 在Windows中,每个用户帐户有一个唯一的安全标识符(Secur ...
- FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before
FreeBSD Try to set MAKE_JOBS_UNSAFE=yes and rebuild before,玛德,FreeBSD安装软件就是蛋疼~ mark In some ports th ...
- 也许,这样理解HTTPS更容易_转载
转自:也许,这样理解HTTPS更容易 原文衔接:https://showme.codes/2017-02-20/understand-https/ 作者:翟志军 摘要 本文尝试一步步还原HTTPS的 ...
- IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)
定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象:抽象不应该依赖细节:细节应该依赖抽象. 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原 ...