BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]
题意:
查询区间中出现次数$>2$的颜色个数
一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做
然后就T了
因为bzoj上数据是1e6....
还是离线树状数组吧....
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lc(x) t[x].l
#define rc(x) t[x].r
const int N=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n, k, Q, a[N], last[N], pos[N], l, r;
struct ChairTree{
struct meow{int l, r, sum;} t[N*];
int sz, root[N];
void ins(int &x, int l, int r, int p) {
t[++sz] = t[x]; x=sz;
t[x].sum++;
if(l==r) return;
int mid = (l+r)>>;
if(p<=mid) ins(t[x].l, l, mid, p);
else ins(t[x].r, mid+, r, p);
}
int que(int x, int y, int l, int r, int ql, int qr) {
if(ql<=l && r<=qr) return t[y].sum - t[x].sum;
else {
int mid=(l+r)>>, ans=;
if(ql<=mid) ans += que(lc(x), lc(y), l, mid, ql, qr);
if(mid<qr) ans += que(rc(x), rc(y), mid+, r, ql, qr);
return ans;
}
}
}C1, C2;
int main() {
freopen("in","r",stdin);
n=read(); k=read(); Q=read();
for(int i=; i<=n; i++) a[i]=read(), last[i] = pos[a[i]], pos[a[i]] = i;
for(int i=; i<=n; i++) {
C1.root[i] = C1.root[i-], C1.ins(C1.root[i], , n, last[i]);
C2.root[i] = C2.root[i-], C2.ins(C2.root[i], , n, last[last[i]]);
}
for(int i=; i<=Q; i++)
l=read(), r=read(),
printf("%d\n", C1.que(C1.root[l-], C1.root[r], , n, l, r) - C2.que(C2.root[l-], C2.root[r], , n, l, r) );
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lc(x) t[x].l
#define rc(x) t[x].r
const int N=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n, k, Q, a[N], last[N], pos[N], l, r;
int c[N];
inline void add(int p, int v) {if(p!=) for(;p<=n;p+=(p&-p)) c[p]+=v;}
inline int sum(int p) {int ans=; for(;p;p-=(p&-p)) ans+=c[p]; return ans;}
struct meow{
int l, r, qid;
bool operator <(const meow &a) const {return r<a.r;}
}q[N];
int ans[N], now;
int main() {
freopen("in","r",stdin);
n=read(); k=read(); Q=read();
for(int i=; i<=n; i++) a[i]=read();
for(int i=; i<=Q; i++) l=read(), r=read(), q[i]=(meow){l, r, i};
sort(q+, q++Q);
now = ;
for(int i=; i<=n; i++) {
last[i] = pos[a[i]]; pos[a[i]] = i;
add(last[i], ); add(last[last[i]], -);
while(q[now].r == i) ans[q[now].qid] = sum(i) - sum(q[now].l-), now++;
}
for(int i=; i<=Q; i++) printf("%d\n", ans[i]);
}
BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]的更多相关文章
- zoj2112 树状数组+主席树 区间动第k大
Dynamic Rankings Time Limit: 10000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Subm ...
- BZOJ_1901_Zju2112 Dynamic Rankings_树状数组+主席树
BZOJ_1901_Zju2112 Dynamic Rankings_树状数组+主席树 题意: 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i, ...
- 【bzoj1146】[CTSC2008]网络管理Network 倍增LCA+dfs序+树状数组+主席树
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高 ...
- 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...
- BZOJ_2120_数颜色_Set+树状数组+主席树
BZOJ_2120_数颜色_Set+树状数组+主席树 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L ...
- P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- BZOJ 2743: [HEOI2012]采花 离线树状数组
2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...
- BZOJ 2743: [HEOI2012]采花
2743: [HEOI2012]采花 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 2056 Solved: 1059[Submit][Status ...
- BZOJ 2743: [HEOI2012]采花( 离线 + BIT )
处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...
随机推荐
- C语言函数的作用域规则
“语言的作用域规则”是一组确定一部分代码是否“可见”或可访问另一部分代码和数据的规则. “同一函数中,不同的结构体成员名能相同,当变量处于不同的作用域时,名称可以相同. 注:作用域,其对象是变量, ...
- 网络爬虫技术Jsoup——爬到一切你想要的(转)
转自:http://blog.csdn.net/ccg_201216323/article/details/53576654 本文由我的微信公众号(bruce常)原创首发, 并同步发表到csdn博客, ...
- memcached集群和一致性哈希算法
场景 由于memcached集群各节点之间都是独立的,互不通信,集群的负载均衡是基于客户端来实现的,因此需要客户端用户设计实现负载均衡算法. 取模算法 N个节点,从0->N-1编号,key对N ...
- sublime text如何保存为uft-8无bom编码格式文件
https://jingyan.baidu.com/article/9158e000388092a2541228b6.html 今天发现自己的文件突然多了很多特殊符号,真是奇了怪,查找html里面也并 ...
- 小白的Python之路 day5 hashlib模块
hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ...
- Sencha Touch vs jQuery Mobile
Sencha Touch:重量级框架,类似于Flex SDK;组件封装较多;在各平台交互表现统一(内部封装);入门门槛较高 jQuery Mobile:轻量级框架,实质是jQuery插件;组件较少;交 ...
- Python实现简易Web服务器
1.请自行了解HTTP协议 http://www.cnblogs.com/reboot51/p/8358129.html(点击跳转) 2.创建Socket服务,监听指定IP和端口 3.以阻塞方式等待 ...
- MVVM探索:从ViewModel关闭Window的最佳实践
在WPF里使用MVVM开发的时候,似乎总是不可避免的会遇到这样一个问题:ViewModel在处理完业务之后需要关闭这个Window,这时候要怎么处理? 网上有很多解决方案:有的在ViewModel抛出 ...
- ROM、SDRAM、RAM、DRAM、SRAM、FLASH区别
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- sping中防止定时任务多处运行解决方法
@Servicepublic class TimerJobService implements LzhTimerJobDao{ Logger logger = LoggerFactory.getLog ...