[SDOI2009]HH的项链

原创 2018年04月15日 07:02:10

题目描述

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

分析

莫队入门题,离线读入,维护sum[颜色],当该区间内某一颜色从0加到1时,ans++,反之当某一颜色从1减到0时,ans–;

AC代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm> 
using namespace std;
const int MAXN=500005;
struct Mo{
    int l,r,id;
}q[MAXN];
int N,M,col[MAXN],Be[MAXN],unit;
int sum[MAXN],ans,put[MAXN];
bool cmp1(Mo a,Mo b){
    if(Be[a.l]==Be[b.l]) return a.r<b.r;
    else return a.l<b.l;
}
void revise(int x,int add){
    sum[col[x]]+=add; 
    if(!sum[col[x]]&&add==-1) ans--;
    else if(sum[col[x]]==1&&add==1) ans++; 
}
int main(){
    scanf("%d",&N); unit=sqrt(N); 
    for(int i=1;i<=N;i++) scanf("%d",&col[i]),Be[i]=i/unit+1;
    scanf("%d",&M); 
    for(int i=1;i<=M;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
    sort(q+1,q+M+1,cmp1);
    int l=0,r=0;
    for(int i=1;i<=M;i++){
        while(l<q[i].l) revise(l,-1),l++;
        while(l>q[i].l) revise(l-1,1),l--;
        while(r<q[i].r) revise(r+1,1),r++;
        while(r>q[i].r) revise(r,-1),r--;
        put[q[i].id]=ans;
    }
    for(int i=1;i<=M;i++) 
        printf("%d\n",put[i]);
    return 0; 
}

bzoj 1878 [SDOI2009]HH的项链

区间离线操作不带修改的万能做法就是莫队了。
  • czysjr
  • czysjr
  • 2014年12月19日 19:19
  • 412

洛谷 P1972 [SDOI2009]HH的项链

莫队算法
  • chai_jing
  • chai_jing
  • 2016年09月05日 18:17
  • 325

[BZOJ]1878: [SDOI2009]HH的项链 莫队算法

Description HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此, 他的...
  • baidu_36797646
  • baidu_36797646
  • 2017年04月02日 11:52
  • 308

BZOJ 1878 [SDOI2009]HH的项链 离线+树状数组

BZOJ 1878 [SDOI2009]HH的项链 离线+树状数组
  • wzq_QwQ
  • wzq_QwQ
  • 2015年05月06日 14:12
  • 1172

【bzoj1878】[SDOI2009]HH的项链

莫队裸题。#include #define rep(i,a,b) for(int i=a,_=b;i=_;i--) #define maxn 50007 #define maxm 200007inl...
  • GEOTCBRL
  • GEOTCBRL
  • 2015年11月20日 23:45
  • 744

[SDOI2009]HH的项链

题目描述HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有...
  • sinat_34943123
  • sinat_34943123
  • 2016年12月25日 10:12
  • 325

1878: [SDOI2009]HH的项链

看见题目第一眼就想到莫队了,为什么看网上一堆题解都是树状数组,果然我智商低吗QAQ。 算了,反正莫队乱搞就好了。 很明显,我们用一个数组记录编号为i的贝壳有多少个,增减的时候处理一下维护答案,即在...
  • nlj1999
  • nlj1999
  • 2015年12月14日 15:59
  • 221

BZOJ-1878-HH的项链-SDOI2009

描述 有n个位置(n ≤ 50000), 每个位置有一个颜色(颜色数 ≤ 200000). 询问[L, R]区间的颜色种数. 分析 两种解法都做了一下 1. 离线树状数组统计HZWER:将所...
  • qq_21110267
  • qq_21110267
  • 2015年04月02日 23:15
  • 722

洛谷 P1972 [SDOI2009]HH的项链 (可持久化线段树)

可持久化线段树模版题,其实也可以用莫队来做(当然O(nlognn\log{n})比O(nn√n\sqrt{n})要划算,且代码也非常简洁。)差点忘了放题目了。。。=。=题目背景无题目描述HH 有一串由...
  • Ab_Ever
  • Ab_Ever
  • 2017年04月18日 21:34
  • 230

洛谷P1972:[SDOI2009]HH的项链(莫队/线段树)

题目传送门:https://www.luogu.org/problem/show?pid=1972 分析:本题有很多种做法,有O(n*log(n))的线段树,也有O(n*sqrt(n))的莫队。线段树...
  • KsCla
  • KsCla
  • 2017年04月18日 13:41
  • 453
收藏助手
不良信息举报
您举报文章:[SDOI2009]HH的项链
举报原因:
原因补充:

(最多只允许输入30个字)