[BZOJ 2743] 采花
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] 采花的更多相关文章
- BZOJ 2743 采花(树状数组)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2743 题意:给出一个数列,每个询问查询[L,R]中至少出现两次的数字有多少种? 思路:(1 ...
- BZOJ 2743: [HEOI2012]采花
2743: [HEOI2012]采花 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 2056 Solved: 1059[Submit][Status ...
- BZOJ 2743: [HEOI2012]采花( 离线 + BIT )
处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...
- BZOJ 2743: [HEOI2012]采花 离线树状数组
2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...
- 洛谷 P2056 BZOJ 2743 [HEOI2012]采花
//表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...
- BZOJ 2743 【HEOI2012】 采花
题目链接:采花 这道题一眼看去,一个很显然的想法就是莫队.但是数据范围是\(10^6\)级别的,莫队显然已经过不去了. 其实感觉这道题和以前写过的一道题HH的项链很像.只不过那道题要求的是区间出现次数 ...
- 采花 bzoj 2743
采花(1s 128MB)flower [题目描述] 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整 ...
- [BZOJ 2743] [HEOI 2012] 采花
Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 \(n\) 朵花,花有 \(c\) 种颜色(用整数 \ ...
- [HEOI2012]采花 树状数组 BZOJ 2743
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
随机推荐
- Treap 模板
感觉平衡树也没有以前想的那么玄乎,(其实set超好用的),非旋式Treap挺好理解,和可并堆,二叉搜索树有很大联系 推荐博客:http://memphis.is-programmer.com/post ...
- 【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP
先说一下斜率优化:这是一种经典的dp优化,是OI中利用数形结合的思想解决问题的典范,通常用于优化dp,有时候其他的一些决策优化也会用到,看待他的角度一般有两种,但均将决策看为二维坐标系上的点,并转化为 ...
- vector创建2维数组
以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matr ...
- 文件格式转换神器-pandoc
By francis_hao Mar 11,2017 介绍 如果你需要在各种类型的文件中穿梭,那么你需要这把瑞士军刀-pandoc 它可以将各种常见的不常见的文件类型转换成另一种,我感兴趣的是在 ...
- Ubuntu使用vim编辑器时出现上下左右键变成ABCD
今天在配置安装php时,要打开配置文件做些修改,肯定是要使用到vim编辑器的,我按照之前的使用命令之类的,在用到上下左右键时居然出现了ABCD,这我就纳闷了,难道Ubuntu的vim编辑器和别的不一样 ...
- Backup and Restore MySQL Database using mysqlhotcopy
mysqlhotcopy is a perl script that comes with MySQL installation. This locks the table, flush the ta ...
- hdu 1520Anniversary party 树形dp入门
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...
- bzoj 4880 [Lydsy1705月赛]排名的战争 贪心
[Lydsy1705月赛]排名的战争 Time Limit: 8 Sec Memory Limit: 256 MBSubmit: 338 Solved: 69[Submit][Status][Di ...
- 前端面试:提升web性能
1,减少HTTP请求数 A,从设计实现层简化页面 B,合理设置HTTP缓存 C,资源合并与压缩.如果可以的话,尽可能的将外部脚本,央视进行合并,多个合为一,css,javascript,image都可 ...
- 【BZOJ2223&&3524】PATULJCI [主席树]
PATULJCI Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行两个整数 ...