bzoj2161 布娃娃

来源:互联网 发布:淘宝怎么帮朋友代付款 编辑:程序博客网 时间:2024/06/11 12:35

Description
小时候的雨荨非常听话,是父母眼中的好孩子。在学校是老师的左右手,同学的好榜样。后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的。雨荨的妈妈也为有这么一个懂事的女儿感到高兴。一次期末考试,雨荨不知道第多少次,再次考了全年级第一名。雨荨的妈妈看到女儿100分的成绩单时,脸上又泛起了幸福的笑容,作为奖励,她给雨荨买了n个布娃娃。细心的雨荨发现,第i个布娃娃有一个耐心值P[i]以及一个魅力值C[i],并且还有能够忍受的耐心值的上限R[i]以及下限L[i]。当一个布娃娃j满足L[j]<=P[i]并且P[i]<=R[j],那么布娃娃j喜欢布娃娃i。雨荨还发现,一个布娃娃有可能喜欢它自己。每个布娃娃心中都有一个谜团,具体来说就是:第i个布娃娃想知道喜欢它的布娃娃中,魅力值第i大的布娃娃的魅力值是多少,并且称这个布娃娃的谜团答案为这个魅力值的大小,如果不存在,那么这个布娃娃的谜团答案为0。鉴于雨荨的上司栋栋不让题目的数据过大,下面给出数据的生成方法:给出16个参数:
Padd, Pfirst, Pmod, Pprod, Cadd, Cfirst, Cmod, Cprod, Ladd, Lfirst, Lmod, Lprod, Radd, Rfirst, Rmod, Rprod。

P[1] = Pfirst % Pmod, P[i] = (P[i-1] Pprod + Padd + i) % Pmod (i > 1)。

对于C、L、R数组也有类似的得到方式, %代表取余运算。注意:L和R数组生成完之后,如果某个布娃娃的忍耐度上限小于下限,那么交换它的上限和下限。当然,雨荨也不会让你告诉她每个布娃娃的谜团答案,因为那样会使输出数据很大。所以雨荨希望你告诉她,所有布娃娃谜团答案的和除以19921228的余数是多少。

Input
输入的第一行有一个整数n,代表布娃娃的个数。
输入的第二行有16个用空格隔开的整数
分别代表Padd,Pfirst,Pmod,Pprod,Cadd,Cfirst,Cmod,Cprod,Ladd,Lfirst,Lmod,Lprod,Radd,Rfirst,Rmod,Rprod。
16个参数均为1到100,000,000中的整数。

Output
输出一个整数,代表所有布娃娃谜团答案的和除以19921228的余数。

Sample Input
3
2 3 4 3 1 4 5 2 3 6 9 1 1 2 3 4

Sample Output
4

题面补充:n<=10^5

分析:
一眼主席树
但是需要注意的是“喜欢ta”的布娃娃,不是“ta喜欢”的布娃娃

简化了一下题意
给出一堆点,和一堆线段
求覆盖某一点的所有线段中权值第k大的线段

我们把每条线段分成加入和删除两个操作
按照x排序
建立权值线段树,记录C(魅力值)
每个线段树节点中,我们维护几个信息
l,r 左右端点
ml,mr 实际的C值
s在这个节点所管辖的区间内有几个数

P按照从小到大排序
从左向右扫
如果当前的线段端点 < 当前查找的P
则加入权值线段树

在查找的时候,如果当前节点的s根本达不到k,直接return 0
如果>=k我们就分成左右两个节点
如果右节点的s <= k,直接进右儿子
否则 k-=右儿子的s,进入左儿子
(有点像主席树)

我们在这里学到了一个新知识,

建立权值线段树查找第k大的时候
需要记录一下区间内的元素个数,
进行类似主席树的查找

tip

注意:L和R数组生成完之后,
如果某个布娃娃的忍耐度上限小于下限,那么交换它的上限和下限
然而第一次写的时候,我是一边写一边换的,jj

将P排序时,要保存一下原先的排名
因为原先的排名就是查找是需要用的k

我又犯了个zz的错误,
第i个布娃娃想知道喜欢它的布娃娃中,魅力值第i大的布娃娃的魅力值是多少
要找的是第k**大**

爆炸oj日常爆炸

这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int mod=19921228;const int N=100010;struct node{    int x,y,ff;};node li[N*3];int Padd,Pfirst,Pmod,Pprod,Cadd,Cfirst,Cmod,Cprod,Ladd,Lfirst,Lmod,Lprod,Radd,Rfirst,Rmod,Rprod;int L[N],R[N],C[N],n,tot=0;struct nd{    int l,r,ml,mr,s;};nd t[N<<3];struct po{    int x,id;};po P[N];int cmp(const node &a,const node &b){    if (a.x!=b.x) return a.x<b.x;    else return a.ff<b.ff;  //先删后加 }int cmp2(const po &a,const po &b){    return a.x<b.x;}void update(int bh){    t[bh].s=t[bh<<1].s+t[bh<<1|1].s;}void build(int bh,int l,int r)   //权值线段树(魅力值C) {    t[bh].l=l; t[bh].r=r;    t[bh].ml=C[l]; t[bh].mr=C[r];    if (l==r) return;    int mid=(l+r)>>1;    build(bh<<1,l,mid);    build(bh<<1|1,mid+1,r);}void add(int bh,int mb,int val){    if (t[bh].l==t[bh].r)     {        t[bh].s+=val;        return;    }    int mid=(t[bh].l+t[bh].r)>>1;    if (mb<=mid) add(bh<<1,mb,val);    else add(bh<<1|1,mb,val);    update(bh);}int ask(int bh,int k){    if (t[bh].s<k) return 0;    if (t[bh].l==t[bh].r) return t[bh].ml;    if (t[bh<<1|1].s>=k) return ask(bh<<1|1,k);    else return ask(bh<<1,k-t[bh<<1|1].s);}int main(){    scanf("%d",&n);    scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&Padd,&Pfirst,&Pmod,&Pprod,&Cadd,&Cfirst,&Cmod,&Cprod,&Ladd,&Lfirst,&Lmod,&Lprod,&Radd,&Rfirst,&Rmod,&Rprod);    P[1].x=Pfirst%Pmod; C[1]=Cfirst%Cmod; P[1].id=1;    L[1]=Lfirst%Lmod; R[1]=Rfirst%Rmod;    for (int i=2;i<=n;i++)    {        P[i].x=(P[i-1].x*Pprod+Padd+i)%Pmod; C[i]=(C[i-1]*Cprod+Cadd+i)%Cmod; P[i].id=i;        L[i]=(L[i-1]*Lprod+Ladd+i)%Lmod; R[i]=(R[i-1]*Rprod+Radd+i)%Rmod;    }    for (int i=1;i<=n;i++)    {        if (L[i]>R[i]) swap(L[i],R[i]);        tot++; li[tot].x=L[i]; li[tot].y=C[i]; li[tot].ff=1;         tot++; li[tot].x=R[i]+1; li[tot].y=C[i]; li[tot].ff=-1;     }    sort(li+1,li+1+tot,cmp);    sort(C+1,C+1+n);    sort(P+1,P+1+n,cmp2);    build(1,1,n);    int j=1;    int ans=0;    for (int i=1;i<=n;i++)    {        while (li[j].x<=P[i].x)            add(1,li[j].y,li[j].ff),j++;        ans+=ask(1,P[i].id);        ans%=mod;    }    printf("%d",ans);    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 备孕一直没怀孕怎么办 刚生的婴儿打嗝怎么办 小孩40天黄疸高怎么办 婴儿身高长得慢怎么办 四个月的宝宝哭怎么办 孕39周羊水偏多怎么办 孕39周羊水浑浊怎么办 孕晚期羊水过少怎么办 怀孕脐带绕颈一周怎么办 nt检查宝宝趴着怎么办 四维胎儿有问题怎么办 怀孕70天没有胎心怎么办 怀孕20天不想要怎么办 换轮胎胎压监测怎么办 怀孕了吐的厉害该怎么办 怀孕吐完嗓子疼怎么办 怀孕16周不想要怎么办 怀孕四个月胎盘低置怎么办 孕37周胎盘三级怎么办 孕37周胎盘老化怎么办 怀孕22周胎盘1级怎么办 婴儿吃奶粉吐奶怎么办 宝宝吐奶又拉稀怎么办 羊水穿刺21三体怎么办 开始长妊娠纹了怎么办 已经长了妊娠纹怎么办 孕晚期长妊娠纹怎么办 妊娠纹长出来了怎么办 没提前预约四维怎么办 ct检查冠脉钙化怎么办 残角子宫有内膜怎么办 怀孕了长痔疮了怎么办 人流后子宫内膜薄怎么办 多囊子宫内膜薄怎么办 6岁儿童不爱睡觉怎么办 初生儿嗓子哑了怎么办 6岁儿童睡眠不好怎么办 8岁儿童睡眠不好怎么办 1个月婴儿睡眠少怎么办 三岁宝宝心跳快怎么办 宝宝右心房稍大怎么办