BZOJ_2161_布娃娃_权值线段树

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

先离线下来,然后用类似树状数组二维数点的方式把每个布娃娃拆成两个,一个在L处加,一个在R+1处减。
放在一起排序,然后查询时权值线段树上二分即可。
 
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050
#define maxn 100000000
int t[N*35],ls[N*35],rs[N*35],cnt,n,ans,tot;
struct A {
int l,r,p,c;
}a[N];
struct P {
int p,flg,id;
P() {}
P(int p_,int f_,int id_) :
p(p_),flg(f_),id(id_) {}
}d[N<<1];
bool cmp(const P &x,const P &y) {
if(x.p==y.p) return x.flg<y.flg;
return x.p<y.p;
}
void update(int l,int r,int x,int v,int &p) {
if(!p) p=++tot;
t[p]+=v;
if(l==r) return ;
int mid=(l+r)>>1;
if(x<=mid) update(l,mid,x,v,ls[p]);
else update(mid+1,r,x,v,rs[p]);
}
int qk(int l,int r,int k,int p) {
if(l==r) return l;
int mid=(l+r)>>1;
if(k<=t[ls[p]]) return qk(l,mid,k,ls[p]);
else return qk(mid+1,r,k-t[ls[p]],rs[p]);
}
int main() {
int pad,pfi,pmod,prd,cad,cfi,cmod,crd,lad,lfi,lmod,lrd,rad,rfi,rmod,rrd;
register int i;
scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&n,&pad,&pfi,&pmod,&prd,&cad,&cfi,&cmod,&crd,&lad,&lfi,&lmod,&lrd,&rad,&rfi,&rmod,&rrd);
a[1].p=pfi%pmod;
a[1].c=cfi%cmod;
a[1].l=lfi%lmod;
a[1].r=rfi%rmod;
// if(a[1].l>a[1].r) swap(a[1].l,a[1].r);
// d[++cnt]=P(a[1].l,1,1);
// d[++cnt]=P(a[1].r+1,2,1);
// d[++cnt]=P(a[1].p,3,1);
// printf("i=%d, l=%d r=%d p=%d c=%d\n",1,a[1].l,a[1].r,a[1].p,a[1].c);
for(i=2;i<=n;i++) {
a[i].p=(1ll*a[i-1].p*prd+pad+i)%pmod;
a[i].c=(1ll*a[i-1].c*crd+cad+i)%cmod;
a[i].l=(1ll*a[i-1].l*lrd+lad+i)%lmod;
a[i].r=(1ll*a[i-1].r*rrd+rad+i)%rmod;
// if(a[i].l>a[i].r) swap(a[i].l,a[i].r);
// printf("i=%d, l=%d r=%d p=%d c=%d\n",i,a[i].l,a[i].r,a[i].p,a[i].c);
// d[++cnt]=P(a[i].l,1,i);
// d[++cnt]=P(a[i].r+1,2,i);
// d[++cnt]=P(a[i].p,3,i);
}
for(i=1;i<=n;i++) {
if(a[i].l>a[i].r) swap(a[i].l,a[i].r);
d[++cnt]=P(a[i].l,1,i);
d[++cnt]=P(a[i].r+1,2,i);
d[++cnt]=P(a[i].p,3,i);
}
// puts("-----------------------------------");
int now=0,root=0;
sort(d+1,d+cnt+1,cmp);
for(i=1;i<=cnt;i++) {
// printf("i=%d, p=%d flg=%d id=%d\n",i,d[i].p,d[i].flg,d[i].id);
if(d[i].flg==1) {
now++;
update(0,maxn,a[d[i].id].c,1,root);
}else if(d[i].flg==2) {
now--;
update(0,maxn,a[d[i].id].c,-1,root);
}else {
if(now>=d[i].id) {
(ans+=qk(0,maxn,now-d[i].id+1,root))%=19921228;
}
}
}
printf("%d\n",ans);
}

BZOJ_2161_布娃娃_权值线段树的更多相关文章

  1. BZOJ_3685_普通van Emde Boas树_权值线段树

    BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x  若x不存在,插入x 2 x  若x存在,删除x 3    输出当前最小值,若不存 ...

  2. B20J_2733_[HNOI2012]永无乡_权值线段树合并

    B20J_2733_[HNOI2012]永无乡_权值线段树合并 Description:n座岛,编号从1到n,每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用1到 n来表示.某些 ...

  3. BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树

    BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资. ...

  4. [bzoj2733][HNOI2012]永无乡_权值线段树_线段树合并

    永无乡 bzoj-2733 HNOI-2012 题目大意:题目链接. 注释:略. 想法: 它的查询操作非常友善,就是一个联通块内的$k$小值. 故此我们可以考虑每个联通块建一棵权值线段树. 这样的话每 ...

  5. [jdoj1258]野生动物园(change by panxf)_权值线段树_组合数

    人品计算 题目大意:n个数的a序列,m组询问.每次询问给出T,A,B,K.求在a序列的[A,B]的位置之内的K小值P,的$C_{T}^{P \% T} \% 10111$. 注释:每组询问保证区间只相 ...

  6. 3065: 带插入区间K小值_树套树_替罪羊树_权值线段树

    经过周六一天,周一3个小时的晚自习,周二2个小时的疯狂debug,终于凭借自己切掉了这道树套树题. Code: #include <cstdio> #include <algorit ...

  7. 【bzoj2161】布娃娃 权值线段树

    题目描述 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨的妈妈也为有这么一个懂事的女儿感到高兴.一 ...

  8. [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树

    二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...

  9. BZOJ 2161 布娃娃(权值线段树)

    题意 给n<1e5个娃娃,每个娃娃有属性\(p\),\(c\),\(l\),\(r\)(均在ll范围内),问你对每个娃娃\(i\),满足所有\(l_j\leq p_i\leq r_j\)的娃娃\ ...

随机推荐

  1. IT咨询顾问:一次吐血的项目救火

    年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登录,对方技术人员一头雾水不知道什么原因 ...

  2. insertion sort list (使用插入排序给链表排序)

    Sort a linked list using insertion sort. 对于数组的插入排序,可以参看排序算法入门之插入排序(java实现),遍历每个元素,然后相当于把每个元素插入到前面已经排 ...

  3. windows下mongodb安装详解

    1.打开官网https://www.mongodb.com/download-center?jmp=nav#community 注:这里小伙伴们可是开启下FQ软件psiphon 3下载(不开启FQ好像 ...

  4. 【Web页面测试】测试点和测试用例

    1. 需求符合度测试 1. 各级菜单名称显示是否按照需求说明书规定的设计,并且没有遗漏和多余 2. 各级菜单所完成的功能是否按照需求说明书规定的设计,并且没有遗漏和多余 3. 各级菜单的操作顺序和操作 ...

  5. Factory Method (工厂模式)

    什么是工厂设计模式 根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH.SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我 ...

  6. Zookeeper简介和安装(二)

    一.简介: Zookeeper是一个分布式协调服务,提供的服务如下: 命名服务:类似于DNS,但仅对于节点 配置管理:服务配置信息的管理 集群管理:Dubbo使用Zookeeper实现服务治理 分布式 ...

  7. Ocelot中文文档-配置

    这里有一个配置的列子.其中有两个配置块.一个ReRoutes数组和一个GlobalConfiguration.ReRoutes配置块是一些告诉Ocelot如何处理上游请求的对象.Globalconfi ...

  8. 利用分支限界法求解单源最短路(Dijkstra)问题

    分支限界法定义:采用Best fist search算法,并使用剪枝函数的算法称为分支界限法. 分支限界法解释:按Best first的原则,有选择的在其child中进行扩展,从而舍弃不含有最优解的分 ...

  9. 编程之美2.18 数组分割 原创解O(nlogn)的时间复杂度求解:

    题目:有一个无序.元素个数为2n的正整数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组的和最接近? 1 1 2 -> 1 1 vs  2 看题时,解法的时间复杂度一般都大 ...

  10. Jenkins通过Publish over SSH插件实现远程部署

    Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...