[bzoj5178] [Jsoi2011] 棒棒糖

这道题需要用主席树维护,基本上算是裸题。

题目传送门

简单介绍一下主席树:

就是线段树的可持久化,每次新建版本时,都新建一个根,递归新建所有值发生改变的节点。

与普通线段树不同的是,主席树需要记录节点的左右儿子编号。

具体到这道题,从1到n一个一个往主席树里加棒棒糖。

每加一个就建一个新版本。

然后需要把之前版本的信息整合(这道题直接相加就行)到当前版本上。

查询的时候,如果查询区间[l,r],就在第r个版本和第l-1个版本的差里查询即可。

注意主席树需要很大空间。

除了原树(这道题没有原树)的4倍空间以外,每新建一个版本都需要额外的log n的空间。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5
 6 int n,m;
 7 int root[50005],tot,v[850005];
 8 int ls[850005],rs[850005];
 9
10 void add(int &num,int lb,int rb,int c)
11 {
12     if(num==0)num=++tot;
13     v[num]++;
14     if(lb==rb)return;
15     int mid=(lb+rb)>>1;
16     if(c<=mid)add(ls[num],lb,mid,c);
17     else add(rs[num],mid+1,rb,c);
18 }
19
20 void merge(int fr,int &to)
21 {
22     if(to==0){to=fr;return;}
23     if(fr==0)return;
24     v[to]+=v[fr];
25     merge(ls[fr],ls[to]);
26     merge(rs[fr],rs[to]);
27 }
28
29 int ask(int px,int py,int lb,int rb,int mv)
30 {
31     if(v[py]-v[px]<=mv)return 0;
32     if(lb==rb)return lb;
33     int mid=(lb+rb)>>1;
34     if(v[ls[py]]-v[ls[px]]>=v[rs[py]]-v[rs[px]])
35         return ask(ls[px],ls[py],lb,mid,mv);
36     else
37         return ask(rs[px],rs[py],mid+1,rb,mv);
38 }
39
40 int main()
41 {
42     scanf("%d%d",&n,&m);
43     for(int i=1;i<=n;i++)
44     {
45         int t;
46         scanf("%d",&t);
47         add(root[i],1,50000,t);
48         merge(root[i-1],root[i]);
49     }
50     for(int i=1;i<=m;i++)
51     {
52         int l,r;
53         scanf("%d%d",&l,&r);
54         printf("%d\n",ask(root[l-1],root[r],1,50000,(r-l+1)/2));
55     }
56     return 0;
57 }

bzoj 5178

代码还算简单,跟线段树差不多。

这里还有一道一模一样的题:[bzoj3524] [POI2014] KUR-Couriers

bzoj3524传送门( tu hao 题,这个门就是开玩笑的)

洛谷P3567传送门(这个是正经能用的)

这道题的数据范围是棒棒糖的十倍。

把棒棒糖那道题的数组大小改一下就行了。

其他的真的一模一样,不上代码了。

原文地址:https://www.cnblogs.com/eternhope/p/9606588.html

时间: 2024-10-21 14:25:06

[bzoj5178] [Jsoi2011] 棒棒糖的相关文章

【bzoj5178】[Jsoi2011]棒棒糖 主席树

题目描述 Coffee的世界里也是有棒棒糖卖的,Coffee买了N(1≤N≤50000)只连着的.这N只棒棒糖包裹在小塑料袋中,排成一列,相邻的两只棒棒糖的塑料袋是接起来的.为了方便,我们把棒棒糖从左到右编号为1..N.每只棒棒糖有一种口味.第i只的口味是ci(1≤ci≤50000).两只棒棒糖i,j的口味相同,当且仅当ci=cj.Coffee对m只棒棒糖总体口味的评价比较奇怪.如果这m只棒棒糖中,有一种口味c0的数量严格大于总数的一半m/2,那么Coffee认为这m只棒棒糖主要是c0口味的.C

BZOJ 2209: [Jsoi2011]括号序列 [splay 括号]

2209: [Jsoi2011]括号序列 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1111  Solved: 541[Submit][Status][Discuss] Description Input 输入数据的第一行包含两个整数N和Q,分别表示括号序列的长度,以及操作的个数. 第二行包含一个长度为N的括号序列. 接下来Q行,每行三个整数t.x和y,分别表示操作的类型.操作的开始位置和操作的结 束位置,输入数据保证x不小于y.其中t=0表

【BZOJ4710】[Jsoi2011]分特产 组合数+容斥

[BZOJ4710][Jsoi2011]分特产 Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望任何一个同学因为没有拿到特产而感到失落,所以每个同学都必须至少分得一个特产. 例如,JYY 带来了2 袋麻花和1 袋包子,分给A 和B 两位同学,那么共有4 种不同的分配方法: A:麻花,B:麻花.包子 A:麻花.麻花,B:包子 A:包子,B:麻花.麻

安卓棒棒糖,敲出国内ROM厂商真面目

自从去年6月安卓L正式面世以来,国内ROM厂商无不对其磨刀霍霍,纷纷准备开发基于Android 5.0的操作系统.去年下半年的营销大战一定程度上转移了人们的视线,魅族连续发布4款新机很大程度上培育了市场需求,将智能手机市场容量一路推高.更多智能手机新用户和低龄用户加入到市场中来,他们迅速了解并掌握到智能手机行业的最新动向,和那些老用户一样,他们及其渴望能够在自己的手机上体验到最新的安卓5.0版本系统,同时他们非常善于在互联网上表达自己的诉求,于是一场用户倒逼厂商更新系统的年度大戏就此拉开帷幕.

儿子关于棒棒糖的诺言

微笑着看儿子吃棒棒糖,他递给我说:"妈妈尝尝~" 我说:"棒棒糖不能一会儿给这个吃,一会儿给那个吃,只能一人一个.你可以给别人买,但是不能这样的." 他许下了小不点第一个诺言给我: "等我长大了,给妈妈买一个棒棒糖,给爸爸也买一个,买二个~"一边在努力的在伸着两个小指头. 这种感觉,暖暖的,有一种后继有人的力量.儿子现在才两岁,但是他会长大,生长的力量是很伟大的. 胸口有这种温暖涌动着,更觉得温馨的家和挚爱的亲人孩子在一起,是多么美好的一件事情.

Tips &amp; Tricks:怎么让Nexus 5吃上“棒棒糖”?

首先,奉上Android 5.1.1更新的链接,Nexus 5的新工厂镜像的版本号是LMY48B.如果你的手上有部Nexus 5,并且有点空闲,那么花上一小会时间就能够将最新版本的“棒棒糖”刷入Nexus 5.下面详述怎么让Nexus 5吃上“棒棒糖”. 注意:工厂镜像就像字面上说的那样:系统出厂时的快照.这意味着,当刷入工厂镜像时,将会清除掉手机原先存储的游戏,图片,音乐,文件,账户等个人数据.所以,在开始刷工厂镜像之前,确保备份好个人数据(或者对格式化数据不在意). Nexus 5也能够通过

如何吃好Android5.0棒棒糖

谷歌在安卓棒棒糖系统中的"改进"很容易让人眼前一亮,不过也有人认为其便捷的背后同时也带来了一些安全问题.提到安全,关于Android5.0,如何避免棒棒糖安全隐患,吃好Android5.0这颗棒棒糖? 如果你的设备使用了安卓棒棒糖(安卓5.0),为了设备安全,这里有些新的特性需要你去了解: 1. Smart Lock 很少有Android设备携带指纹识别,而Google添加了一些新方法使锁定和解锁设备更加容易. 棒棒糖的一个新的特性SmartLock,允许用户使用另个"Tru

[Bzoj5179][Jsoi2011]任务调度(左偏树)

5179: [Jsoi2011]任务调度 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5  Solved: 4[Submit][Status][Discuss] Description 一台超级计算机共有N颗CPU.现在这台超级计算机有M个任务要做,但同时还要考虑到不能让CPU过热.所幸的是这 台超级计算机已经将任务安排好了,现在要做的只是请你根据安排好的指令来模拟它的工作过程.一开始,这N颗C PU都没有被分配任何的任务.之后,会给你以下几类

POI2011 棒棒糖 Lollipop

POI2011 棒棒糖 Lollipop 题目传送门 题意 \(Byteasar\)在比特镇开了一家糖果店,草莓香草味的棒棒糖是当地孩子们的最爱.这些棒棒糖都是由长度相同的香草味或者草莓味的片段组成的.一整根棒棒糖的价格是每一段棒棒糖的价格之和,每一段香草味的棒棒糖价格为一元,草莓味的棒棒糖价格为两元. 图1:举个例子,这是一根由五段组成的棒棒糖,草莓味和香草味的棒棒糖交替排列,这根棒棒糖的价格为\(8\)元. 现在,\(Byteasar\) 只剩下最后一根棒棒糖了.这根棒棒糖太长了,因此 \(