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 )
处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...
随机推荐
- codeforce 375_2_b_c
codeforce 375_2 标签: 水题 好久没有打代码,竟然一场比赛两次卡在边界条件上....跪 b.题意很简单...纯模拟就可以了,开始忘记了当字符串结束的时候也要更新两个值,所以就错了 #i ...
- hdu_1573 X问题(不互素的中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1573 X问题 Time Limit: 1000/1000 MS (Java/Others) Me ...
- oracle erp 表结构
BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...
- [国嵌笔记][036][关闭MMU和CACHE]
关闭MMU和CACHE 1.Cache是一种容量小,但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝.按功能分为ICache(指令Cache)和DCache(数据Cache) 2.虚拟地址 ...
- .29-浅析webpack源码之Resolver.prototype.resolve
在上一节中,最后返回了一个resolver,本质上就是一个Resolver对象: resolver = new Resolver(fileSystem); 这个对象的构造函数非常简单,只是简单的继承了 ...
- 立即掌握SSM框架的要诀
ssm框架的总结: 1. 首先是POM.xml 文件的配置,他的作用主要是添加依懒的关系和自动下载相关的包. 2.对jdbc.properties进行配置 ,作用就是连接你的数据库的配置. 3.对接着 ...
- 本地phpstudy时常停机连接失败,php.ini文件中9000端口问题
2018/01/05 13:35:07 [error] 20508#19380: *1 WSARecv() failed (10054: An existing connection was forc ...
- Codeforces 895C - Square Subsets 状压DP
题意: 给了n个数,要求有几个子集使子集中元素的和为一个数的平方. 题解: 因为每个数都可以分解为质数的乘积,所有的数都小于70,所以在小于70的数中一共只有19个质数.可以使用状压DP,每一位上0表 ...
- excel去除空格
=SUBSTITUTE(Sheet1!A1," ","") 在sheet2中输入上述公式,然后再通过拖拽复制公式,即可以很快的将sheet1中的数据全部处理.
- linux_nginx环境配置
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm # 安装阿里的epel源 国内使用web站点最多的w ...