●BZOJ 2743 [HEOI2012]采花
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2743
题解:
树状数组,离线
求区间里面有多少种出现次数大于等于 2 的颜色。
类似某一个题,问的是区间里面有多少种不同的颜色(即出现次数大于等于 1 )。
把询问离线,并按右端点 r 从小到大排序。
并维护出 last[i] 表示与 i 位置颜色相同的上一个位置。
然后从左到右枚举右端点 i,
在树状数组中把 last[last[i]] 位置(如果不为 0 的话)的值 -1,
把 last[i] 位置(如果不为 0 的话)的值 +1
(也就是只给距离当前枚举到的 i位置第二近的并且和i位置颜色相同的那个位置打上标记)
然后回答右端点在 i 处的询问即可。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 1000500
using namespace std;
int last[MAXN],pos[MAXN],ANS[MAXN];
int N,C,M;
struct Question{
int l,r,id;
bool operator <(const Question &rtm)const{
return r<rtm.r;
}
}Q[MAXN];
struct BIT{
int A[MAXN],N;
void Reset(int n){N=n;}
int Lowbit(int x){return x&-x;}
void Modify(int p,int x){
while(p<=N) A[p]+=x,p+=Lowbit(p);
}
int Query(int p){
static int ret; ret=0;
while(p) ret+=A[p],p-=Lowbit(p);
return ret;
}
}DT;
char gc(){
static char s[300010];
static int bit=300000,len,p;
if(p>=len) len=fread(s,1,bit,stdin),s[len]=EOF,p=0;
return s[p++];
}
void read(int &x){
static int f; static char ch;
x=0; f=1; ch=gc();
while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=gc();}
while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=gc();}
x=x*f;
}
void write(int x){
static char s[20]; static int p;
if(!x) putchar('0');
if(x<0) putchar('-'),x=-x;
while(x) s[p++]=x%10+'0',x/=10;
while(p) putchar(s[--p]);
putchar('\n');
}
int main(){
read(N); read(C); read(M);
for(int i=1,a;i<=N;i++)
read(a),last[i]=pos[a],pos[a]=i;
for(int i=1;i<=M;i++)
read(Q[i].l),read(Q[i].r),Q[i].id=i;
sort(Q+1,Q+M+1);
DT.Reset(N);
for(int i=1,j=1;i<=N;i++){
if(last[last[i]]) DT.Modify(last[last[i]],-1);
if(last[i]) DT.Modify(last[i],1);
while(Q[j].r==i&&j<=M){
ANS[Q[j].id]=DT.Query(Q[j].r)-DT.Query(Q[j].l-1);
j++;
}
}
for(int i=1;i<=M;i++) write(ANS[i]);
return 0;
}
●BZOJ 2743 [HEOI2012]采花的更多相关文章
- 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]采花 [树状数组 | 主席树]
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...
- bzoj 2743: [HEOI2012]采花【树状数组】
离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[ ...
- 2743: [HEOI2012]采花
Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...
- 【BZOJ】2743: [HEOI2012]采花(树状数组)
题目 传送门:QWQ 分析 已经凉凉.看错数据范围敲了发莫队........ 和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加. 区间加就树状数组特技 代码 #include & ...
- [bzoj2743][HEOI2012]采花(树状数组+离线)
2743: [HEOI2012]采花 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 1832 Solved: 954[Submit][Status] ...
随机推荐
- 201621123050 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:接口.has-a.comparable 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. ...
- [USACO4.1]麦香牛块Beef McNuggets
https://www.luogu.org/problemnew/show/P2737 给出n个数ai,求这n个数不能累加出的最大的数 最大的数无限大或能凑出所有的自然数则输出0 n<=10,a ...
- SpringMVC 无法访问到指定jsp页面可能的原因
当出现你的程序可以访问到对应的controller层.但是却无法访问对应的jsp文件时.你首先做的不是检查web.xml等配置文件,而是打开的服务器根文件检查对应路径下的文件是否存在.命名是否正确.命 ...
- python之路--day6---文件处理
一.文件 1.文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件, 可以将自己的数据永久保存下来. 2.操作流程 #1. 打开文件,得到文件句柄并赋值给一个变量--f = o ...
- 看到一个对CAP简单的解释
一个分布式系统里面,节点组成的网络本来应该是连通的.然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域.数据就散布在了这些不连通的区域中.这就叫分区.当你一个数据项只在一个节点中 ...
- EasyUI Datagrid 分页的情况下实现点击表头的小三角图标对数据库中所有数据重新排序
说明一下: 当点击 datagrid 表头某一列的小三角图标时,easyui 本身是有排序的,但是在当我们对 datagrid 进行了分页的情况下,点击排序只是对当前页的数据进行排序,而需求需要我对数 ...
- 在WebStorm中启动Angular项目
点击配置 创建 选择命令 package.json 运行 查看运行结果
- python全栈开发-re模块(正则表达式)应用(字符串的处理)
一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串集指定规则:该 ...
- hadoop2.6.0实践:引入开发依赖的jar包
hadoop-2.5.0\share\hadoop\common 所有jar,hadoop-2.5.0\share\hadoop\common\lib 所有jar,hadoop-2.5.0\sha ...
- OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
OAuth2.0学习(2-1)OAuth的开源项目 1.开源项目列表 http://www.oschina.net/project/tag/307/oauth?lang=19&sort=t ...