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
 
题解:
  题意等价于求能覆盖某个点的所有区间中第K大的值,这个就可以用扫描线+splay去求
code:
 #include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
char ch; bool ok;
void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
const int maxn=;
const int inf=0x3f3f3f3f;
const int MOD=;
int add,first,mod,prod,tmp[][maxn];
int n,idx,ans;
struct Data{
int x,id,op;
}list[maxn*];
bool operator<(const Data &a,const Data &b){
if (a.x!=b.x) return a.x<b.x;
return a.op<b.op;
}
struct Splay{
#define ls son[x][0]
#define rs son[x][1]
int root,fa[maxn],son[maxn][],siz[maxn],val[maxn];
void init(){
root=n+,siz[n+]=,val[n+]=inf,son[n+][]=n+;
siz[n+]=,val[n+]=-inf,fa[n+]=n+;
}
int which(int x){return son[fa[x]][]==x;}
void updata(int x){siz[x]=siz[ls]++siz[rs];}
void rotate(int x){
int y=fa[x],z=fa[y],d=which(x),dd=which(y);
fa[son[x][d^]]=y,son[y][d]=son[x][d^],fa[x]=z;
if (z) son[z][dd]=x;
son[x][d^]=y,fa[y]=x,updata(y);
}
void splay(int x){
while (fa[x]){
if (!fa[fa[x]]) rotate(x);
else if (which(fa[x])==which(x)) rotate(fa[x]),rotate(x);
else rotate(x),rotate(x);
}
updata(x),root=x;
}
void insert(int x,int v){
fa[x]=son[x][]=son[x][]=,siz[x]=,val[x]=v;
int f,t;
for (f=t=root;t;f=t,t=son[t][v<val[t]]);
fa[x]=f,son[f][v<val[f]]=x,splay(x);
}
int find_left(int x){for (;son[x][];x=son[x][]);return x;}
void _delete(int x){
splay(x);
int y=find_left(son[x][]);
fa[ls]=fa[rs]=,splay(y),fa[ls]=y,son[y][]=ls,updata(y);
}
int find_kth(int x,int k){
if (!x) return ;
if (siz[ls]>=k) return find_kth(ls,k);
if (siz[ls]+==k) return x;
return find_kth(rs,k-siz[ls]-);
}
int query(int k){
int x=find_kth(root,k+);
if (<=x&&x<=n) return val[x];
return ;
}
}T;
int main(){
read(n);
for (int op=;op<;op++){
read(add),read(first),read(mod),read(prod);
tmp[op][]=first%mod;
for (int i=;i<=n;i++) tmp[op][i]=(1LL*tmp[op][i-]*prod+add+i)%mod;
}
for (int i=;i<=n;i++) if (tmp[][i]>tmp[][i]) swap(tmp[][i],tmp[][i]);
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
sort(list+,list+idx+),T.init();
for (int i=;i<=idx;i++){
int id=list[i].id,op=list[i].op;
if (op==) T.insert(id,tmp[][id]);
else if (op==) ans+=T.query(id),ans%=MOD;
else if (op==) T._delete(id);
}
printf("%d\n",ans);
return ;
}

bzoj2161: 布娃娃的更多相关文章

  1. BZOJ2161: 布娃娃 整体二分

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

  2. 【主席树】【bzoj2161】[hdu4348]

    #include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...

  3. 【BZOJ2161】布娃娃 扫描线+线段树

    [BZOJ2161]布娃娃 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨 ...

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

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

  5. Unity Ragdoll(布娃娃系统)

    逼真的动作如何实现的? 在一些游戏中当NPC或玩家死亡的时候,死亡的肢体动作十分逼真,这一物理现象如何用Unity来实现呢?Unity物理引擎中的Ragdoll系统,可以用来创建这种效果,具体请参阅以 ...

  6. BZOJ_2161_布娃娃_权值线段树

    BZOJ_2161_布娃娃_权值线段树 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二 代考神,这和小时候培养的良好素质是 ...

  7. unity3d中布娃娃系统

    原地址:http://blog.csdn.net/pizi0475/article/details/9771941 转自: http://forum.mirax.com.tw/unity/viewto ...

  8. 两分钟学会Unity3D布娃娃的使用

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/28587233 在RPG游戏中,为了让人 ...

  9. BZOJ 2161 布娃娃 (主席树)

    题面 想了一个主席树做法 我们把每个区间的两个端点拆开 对$L,R$分别从小到大排序,分别从左到右依次把对应标号的$c_{i}$插入到权值主席树里 每次查询$p_{i}$,在排序后的$L,R$数组上分 ...

随机推荐

  1. vs2013中将复制过来的文件或文件夹显示到解决方案管理

    先将文件夹和文件复制到VS程序所在的位置,在VS2013解决方案资源管理器中找到这些文件所在的上一级文件夹,先将那个上层文件夹收缩起来,然后再点击解决方案资源管理器上的“显示所有文件”按纽,展开这个文 ...

  2. 什么鬼,又不知道怎么命名class了

    什么鬼,又不知道怎么命名class了 2015/10/25 · CSS · class 分享到:5 原文出处: 结一(@结一w3cplus)    相信写css的人都会遇到下面的问题: 糟糕,怎么命名 ...

  3. 线段树简单入门 (含普通线段树, zkw线段树, 主席树)

    线段树简单入门 递归版线段树 线段树的定义 线段树, 顾名思义, 就是每个节点表示一个区间. 线段树通常维护一些区间的值, 例如区间和. 比如, 上图 \([2, 5]\) 区间的和, 为以下区间的和 ...

  4. Promise关键知识

    异步是ES6中使用频率最高的特性之一,也是面试中经常会被问到的问题,特此整理了相应的笔记 一.Promise的三种状态 pending-异步操作没有结束 fulfilled-异步操作已成功结束,最常见 ...

  5. linux备忘录-正则表达式与文件格式化处理

    正则表达式 POSIX标准的符号 [:alnum:] -> 英文大小写字母和数字 0-9,A-Z,a-z [:alpha:] -> 英文大小写字母 A-Z,a-z [:blank:] -& ...

  6. Linux 简单socket实现TCP通信

    服务器端代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <stri ...

  7. 解决ecplise安装mybatipse插件时报找不到jar包的错

    在安装mybatipse插件的时候一直报这个错,脑袋疼,在网上搜了半天也没有结果,最后摸索了半天解决了,这里先贴一张图 1.先找到eclipse的安装目录,然后把相应的jar包拷到plugins里去, ...

  8. input标签与label标签的“合作关系”

    一直忽略了input和label的关系.一次在做自定义单选框的时候又重新捡起来这对“兄弟”. label的for属性和input的id值一致的话,input和label就会组成一个组.例如: < ...

  9. 【bzoj4052】[Cerc2013]Magical GCD 暴力

    题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 2 ...

  10. P2574 XOR的艺术

    题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...