线段树离线处理(区间内出现k次的数有多少个)Codeforces Round #136 (Div. 2)
来源:互联网 发布:淘宝个人主页 编辑:程序博客网 时间:2024/04/29 14:51
The Little Elephant loves playing with arrays. He has array a, consisting of n positive integers, indexed from 1 ton. Let's denote the number with index i as ai.
Additionally the Little Elephant has m queries to the array, each query is characterised by a pair of integerslj andrj(1 ≤ lj ≤ rj ≤ n). For each querylj, rj the Little Elephant has to count, how many numbersx exist, such that number x occurs exactly x times among numbersalj, alj + 1, ..., arj.
Help the Little Elephant to count the answers to all queries.
The first line contains two space-separated integers n andm (1 ≤ n, m ≤ 105) — the size of arraya and the number of queries to it. The next line containsn space-separated positive integers a1, a2,..., an(1 ≤ ai ≤ 109). Nextm lines contain descriptions of queries, one per line. Thej-th of these lines contains the description of thej-th query as two space-separated integerslj andrj(1 ≤ lj ≤ rj ≤ n).
In m lines print m integers — the answers to the queries. The j-th line should contain the answer to the j-th query.
7 23 1 2 2 3 3 71 73 4
31
跟hdu4358很像,只不过4358需要先把树形结构转化成线性的
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;#define LL(x) (x<<1)#define RR(x) (x<<1|1)const int N=1e5+5;struct Query{ int st,ed,id; Query(){} Query(int a,int b,int c){st=a;ed=b;id=c;} bool operator < (const Query &b)const { return ed<b.ed; }};struct node{ int lft,rht,sum; int mid(){return lft+(rht-lft)/2;}};struct Segtree{ node tree[N*4]; void build(int lft,int rht,int ind) { tree[ind].lft=lft; tree[ind].rht=rht; tree[ind].sum=0; if(lft!=rht) { int mid=tree[ind].mid(); build(lft,mid,LL(ind)); build(mid+1,rht,RR(ind)); } } void updata(int pos,int ind,int valu) { tree[ind].sum+=valu; if(tree[ind].lft==tree[ind].rht) return; else { int mid=tree[ind].mid(); if(pos<=mid) updata(pos,LL(ind),valu); else updata(pos,RR(ind),valu); } } int query(int be,int end,int ind) { int lft=tree[ind].lft,rht=tree[ind].rht; if(be<=lft&&rht<=end) return tree[ind].sum; else { int mid=tree[ind].mid(); int sum1=0,sum2=0; if(be<=mid) sum1=query(be,end,LL(ind)); if(end>mid) sum2=query(be,end,RR(ind)); return sum1+sum2; } }}seg;vector<int> pos[N];vector<Query> query;int data[N],cnt[N],res[N];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&data[i]); for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); query.push_back(Query(a,b,i)); } sort(query.begin(),query.end()); int ind=0; seg.build(1,n,1); for(int i=1;i<=n;i++) { int valu=data[i]; if(valu<=n) { cnt[valu]++; pos[valu].push_back(i); if(cnt[valu]>=valu) { if(cnt[valu]>valu) seg.updata(pos[valu][cnt[valu]-valu-1],1,-2); if(cnt[valu]>valu+1) seg.updata(pos[valu][cnt[valu]-valu-2],1,1); seg.updata(pos[valu][cnt[valu]-valu],1,1); } } while(query[ind].ed==i&&ind<m) { res[query[ind].id]=seg.query(query[ind].st,query[ind].ed,1); ind++; } } for(int i=0;i<m;i++) printf("%d\n",res[i]); return 0;}
- 线段树离线处理(区间内出现k次的数有多少个)Codeforces Round #136 (Div. 2)
- Codeforces Round #365 (Div. 2) D 线段树+离线 (区间内的数有哪些
- 【Codeforces Round 365 (Div 2)D】【离线询问 树状数组 前驱思想】Mishka and Interesting sum 区间内出现次数偶数的数的异或和
- Codeforces Round #218 (Div. 2) (线段树区间处理)
- hdu 4358 欧拉树形变线性+树状数组+离散化+离线+区间内出现k次的不同的数有几个+手动扩展栈
- 线段树离线处理(区间内不同的数的个数)hdu3333
- Codeforces Round #136 (Div. 2) D. Little Elephant and Array 线段树 离线处理
- 区间内出现某个数k次的数目问题
- 区间内有多少个不同的数字(离线树状数组)
- 【HDU5722 BestCoder 2nd AnniversaryE】【线段树 矩形面积并】Jewelry 多少区间内至少存在一数恰好出现tim次
- [CF#365 (Div. 2) Mishka and Interesting sum] 线段树离线处理区间不同数
- Codeforces Round #149 (Div. 2) E. XOR on Segment(21棵线段树处理每一位+区间异或)
- SPOJ3267 D-Query 树状数组离线操作 或 主席树 查询某一区间内有多少不同的数
- 线段树(待续)(区间每个数加上不同的斐波那契额数)Codeforces Round #FF (Div. 2)E
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(离线线段树)
- 【Codeforces Round 271 (Div 2)F】【贪心 线段树】Ant colony 区间段内是其他所有数因子的数的个数
- 线段树Codeforces Round #136 (Div. 2)
- Codeforces Round #271 (Div. 2) F题 Ant colony(线段树求区间gcd)
- 部署中遇到的问题-UWSGI(一)
- Promises与Javascript异步编程
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
- ios同步机制
- Openstack Hrozion开发(四)
- 线段树离线处理(区间内出现k次的数有多少个)Codeforces Round #136 (Div. 2)
- NAT和IPSec在思考路由器上的实现
- hduoj1087!【DP】
- zoj 1007
- 一元线性回归分析及java实现
- poj 3264 Balanced Lineup(线段树)
- 深入解析Java设计模式之动态代理
- cocos2dx windows phone平台下CCLabelTTF自动换行的实现(2)
- 第十六篇 SDH传送网分层结构