Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2743

Algorithm:

此题询问区间内出现次数超过1个的数字

明显在线做无从下手,无法在区间两端无序的情况下统计符合要求的数字

但可以发现,如果左端递增,是可以用树状数组维护右端数据的

于是我们采取离线方式,将询问排序,左端点不断右移,树状数组随之更新即可

先预处理出next和first数组

每次走过一个数对nxt[i]--,nxt[nxt[i]]++

Code:

#include <bits/stdc++.h>

using namespace std;
typedef pair<int,int> P;
typedef pair<P,int> PP;
#define F first
#define S second const int MAXN=;
int dat[MAXN],bit[MAXN],res[MAXN],nxt[MAXN],cur[MAXN],fst[MAXN],n,c,m;
PP op[MAXN]; inline int read()
{
char ch;int num,f=;
while(!isdigit(ch=getchar())) f|=(ch=='-');
num=ch-'';
while(isdigit(ch=getchar())) num=num*+ch-'';
return f?-num:num;
} inline void write(long long x)
{
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
} void update(int pos,int x)
{
while(pos<=n)
{
bit[pos]+=x;
pos+=pos&(-pos);
}
} int cal(int pos)
{
int ret=;
while(pos)
{
ret+=bit[pos];
pos-=pos&(-pos);
}
return ret;
} int main()
{
n=read();c=read();m=read();
fill(nxt,nxt+MAXN,MAXN-);
for(int i=;i<=n;i++) dat[i]=read();
for(int i=;i<=m;i++) op[i].F.F=read(),op[i].F.S=read(),op[i].S=i;
for(int i=;i<=n;i++) //预处理
{
if(!cur[dat[i]]) fst[dat[i]]=i;
nxt[cur[dat[i]]]=i,cur[dat[i]]=i;
}
for(int i=;i<=c;i++) if(nxt[fst[i]]) update(nxt[fst[i]],); nxt[]=;op[].F.F=;
sort(op+,op+m+); for(int i=;i<=m;i++) //离线
{
for(int j=op[i-].F.F;j<op[i].F.F;j++) //更新右端点
update(nxt[nxt[j]],),update(nxt[j],-);
res[op[i].S]=cal(op[i].F.S)-cal(op[i].F.F-);
} for(int i=;i<=m;i++) write(res[i]),putchar('\n');
return ;
}

Review:

1、当数据维护与左端点的单调性有关时

考虑排序后离线解题

2、一般涉及询问出现字符个数的问题

预处理出nxt数组,滑动窗口来解题

[BZOJ 2743] 采花的更多相关文章

  1. BZOJ 2743 采花(树状数组)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2743 题意:给出一个数列,每个询问查询[L,R]中至少出现两次的数字有多少种? 思路:(1 ...

  2. BZOJ 2743: [HEOI2012]采花

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 2056  Solved: 1059[Submit][Status ...

  3. BZOJ 2743: [HEOI2012]采花( 离线 + BIT )

    处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...

  4. BZOJ 2743: [HEOI2012]采花 离线树状数组

    2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...

  5. 洛谷 P2056 BZOJ 2743 [HEOI2012]采花

    //表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...

  6. BZOJ 2743 【HEOI2012】 采花

    题目链接:采花 这道题一眼看去,一个很显然的想法就是莫队.但是数据范围是\(10^6\)级别的,莫队显然已经过不去了. 其实感觉这道题和以前写过的一道题HH的项链很像.只不过那道题要求的是区间出现次数 ...

  7. 采花 bzoj 2743

    采花(1s 128MB)flower [题目描述] 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整 ...

  8. [BZOJ 2743] [HEOI 2012] 采花

    Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 \(n\) 朵花,花有 \(c\) 种颜色(用整数 \ ...

  9. [HEOI2012]采花 树状数组 BZOJ 2743

    题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...

随机推荐

  1. 【BZOJ 1901】Zju2112 Dynamic Rankings &&【COGS 257】动态排名系统 树状数组套线段树

    外面是树状数组,里面是动态开点线段树,对于查询我们先把有关点找出来,然后一起在线段树上行走,这样就是单个O(log2)的了 #include <cstdio> #include <v ...

  2. [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity 树状数组优化dp

    这个dp乍看不科学,仔细一看更不科学,所以作为一个执着BOY,我决定要造数据卡死波兰人民,但是我造着造着就......证出来了......... 这个就是把 < > =分开讨论每次找到f[ ...

  3. 门户系统整合sso cookie共享及显示用户信息

    1.1 门户系统整合sso 在门户系统点击登录连接跳转到登录页面.登录成功后,跳转到门户系统的首页,在门户系统中需要从cookie中 把token取出来.所以必须在登录成功后把token写入cooki ...

  4. bzoj 1076 状压DP

    我们设w[i][s]为当前到第i关,手中的物品为s的时候,期望得分为多少,其中s为二进制表示每种物品是否存在. 那么就比较容易转移了w[i][s]=(w[i-1][s']+v[j]) *(1/k),其 ...

  5. Extjs GridPanel 鼠标拖动选中单元格

    本文主要是实现了一个拖动选择单元格并计算的功能

  6. python3 购物车练习

    # 购物车# 功能要求:# 要求用户输入总资产,例如:2000# 显示商品列表,让用户根据序号选择商品,加入购物车# 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功.# 可充值.某商品 ...

  7. LBP简单实现

    Local Binary Pattern 确实够简单...先写个代码在这儿,空了再弄 #include <opencv2/opencv.hpp> #include <iostream ...

  8. Linux makefile 教程 非常详细,且易懂【转】

    转自:   http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

  9. jQuery九宫格图片拉伸变大代码

    之前看到网上有jQuery九宫格图片拉伸变大代码只可以动六张图片,我改了改做了九张图片都可以做的 图片的布局 成品就是每一个图片都可以动看到大图 css样式 <style> /*九宫格*/ ...

  10. WPF拖放功能实现

    写在前面:本文为即兴而作,因此难免有疏漏和词不达意的地方.在这里,非常期望您提供评论,分享您的想法和建议. 这是一篇介绍如何在WPF中实现拖放功能的短文. 首先要读者清楚的一件事情是:拖放主要分为拖放 ...