题意

给n<1e5个娃娃,每个娃娃有属性\(p\),\(c\),\(l\),\(r\)(均在ll范围内),问你对每个娃娃\(i\),满足所有\(l_j\leq p_i\leq r_j\)的娃娃\(j\)中第\(i\)大的\(c_i\)是多少

思路

离散化后

扫描线段上的所有点,对当前点覆盖的所有线段所在的娃娃的\(c_i\)建权值线段树,\(log\)查询即可

代码

  1. int n;
  2. int a[maxn];
  3. ll C[maxn];
  4. vector<ll>v;
  5. int find(ll x){
  6. return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
  7. }
  8. ll P[maxn],L[maxn],R[maxn];
  9. vector<ll>in[maxn],out[maxn],hv[maxn];
  10. ll Padd, Pfirst, Pmod, Pprod, Cadd, Cfirst, Cmod, Cprod, Ladd, Lfirst, Lmod, Lprod, Radd, Rfirst, Rmod, Rprod;
  11. void add(int p, int x, int l, int r, int root){
  12. int mid = l+r>>1;
  13. if(l==r){
  14. a[root]+=x;return;
  15. }
  16. if(p<=mid)add(p,x,lson);
  17. else add(p,x,rson);
  18. a[root]=a[lc]+a[rc];
  19. return;
  20. }
  21. int ask(int k, int l, int r, int root){
  22. int mid = l+r>>1;
  23. if(k>a[root])return 0;
  24. if(l==r)return l;
  25. if(a[rc]>=k)return ask(k,rson);
  26. else return ask(k-a[rc],lson);
  27. }
  28. int main() {
  29. scanf("%d", &n);
  30. scanf("%lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld %lld",&Padd,&Pfirst,&Pmod,&Pprod,&Cadd,&Cfirst,&Cmod,&Cprod,&Ladd,&Lfirst,&Lmod,&Lprod,&Radd,&Rfirst,&Rmod,&Rprod);
  31. P[1]=Pfirst%Pmod;C[1]=Cfirst%Cmod;L[1]=Lfirst%Lmod;R[1]=Rfirst%Rmod;
  32. for(int i = 1; i <= n; i++){
  33. if(i>1){
  34. P[i] = (P[i-1] * Pprod + Padd + i) % Pmod;
  35. C[i] = (C[i-1] * Cprod + Cadd + i) % Cmod;
  36. L[i] = (L[i-1] * Lprod + Ladd + i) % Lmod;
  37. R[i] = (R[i-1] * Rprod + Radd + i) % Rmod;
  38. }
  39. }
  40. for(int i = 1; i <= n; i++){
  41. if(L[i]>R[i])swap(L[i],R[i]);
  42. v.pb(P[i]);v.pb(C[i]);v.pb(L[i]);v.pb(R[i]+1);
  43. }
  44. sort(v.begin(),v.end());
  45. v.erase(unique(v.begin(),v.end()),v.end());
  46. for(int i = 1; i <= n; i++){
  47. in[find(L[i])].pb(find(C[i]));
  48. out[find(R[i]+1)].pb(find(C[i]));
  49. hv[find(P[i])].pb(i);
  50. }
  51. int tot = v.size();
  52. ll sum = 0;
  53. for(int i = 1; i <= tot; i++){
  54. for(int j = 0; j < (int)in[i].size(); j++){
  55. add(in[i][j],1,1,tot,1);
  56. }
  57. for(int j = 0; j < (int)out[i].size(); j++){
  58. add(out[i][j],-1,1,tot,1);
  59. }
  60. for(int j = 0; j < (int)hv[i].size(); j++){
  61. int now = ask(hv[i][j],1,tot,1);
  62. if(now)sum=(sum+v[now-1])%19921228;
  63. }
  64. }
  65. printf("%lld",sum%19921228);
  66. return 0;
  67. }

BZOJ 2161 布娃娃(权值线段树)的更多相关文章

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

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

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

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

  3. bzoj 2733: [HNOI2012]永无乡【并查集+权值线段树】

    bzoj上数组开大会T-- 本来想用set瞎搞的,想了想发现不行 总之就是并查集,每个点开一个动态开点的权值线段树,然后合并的时候把值并在根上,询问的时候找出在根的线段树里找出k小值,看看这个值属于哪 ...

  4. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  5. [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)

    [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...

  6. BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)

    题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...

  7. BZOJ 4605 崂山白花蛇草水(权值线段树+KD树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4605 [题目大意] 操作 1 x y k 表示在点(x,y)上放置k个物品, 操作 2 ...

  8. bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树

    4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MB Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店. ...

  9. bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

随机推荐

  1. Java类成员之代码块

    代码块含义:使用{ }括起来的代码 代码块类型: 1.局部代码块:定义在方法体中. 2.构造代码块:也叫初始化代码块,定义在类中方法体之外. 3.静态代码块:定义在类中方法体之外,被static修饰符 ...

  2. EntityFramework Core表名原理解析,让我来,揭开你神秘的面纱

    前言 上一节我们针对最开始抛出的异常只是进行了浅尝辄止的解析,是不是有点意犹未尽的感觉,是的,我也有这种感觉,看到这里相信您和我会有一些疑惑,要是我们接下来通过注解.Fluent APi.DbSet分 ...

  3. Scala实践14

    1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...

  4. PTA - 拓扑排序

    一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工 ...

  5. python爬虫——urllib使用代理

    收到粉丝私信说urllib库的教程还没写,好吧,urllib是python自带的库,没requests用着方便.本来嘛,python之禅(import this自己看)就说过,精简,效率,方便也是大家 ...

  6. margin和 padding 以及 float :left和float :right的介绍

    1.margin和padding的介绍 margin是外边距,padding是内边距,用CSS时首先要做的就是把所有标签的margin和padding清空.这样更容易控制布局和兼容浏览器. p li等 ...

  7. JS中字符串切片

    1.charAt 作用:根据索引值获取字符串 s1= "Hello world"; // 根据索引求字符 var myChar = s1.charAt(4); console.lo ...

  8. MyBatis5——Mybatis整合log4j、延迟加载

    开启日志:Log4j (1)加入jar包 (2)在conf.xml中配置开启日志: <settings>         <!-- 开启日志,并指定要使用的具体日志为log4j -- ...

  9. ASENET MVC 5 with Bootstrap and Knockout.js 第一弹

     A Basic Example Now that the Knockout library is installed, let’s get right to an example of using ...

  10. P1075,P1138(洛谷)

    今天难得做了做洛谷的题,而且还是两个! P1075:已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数.输入格式:一个正整数n.输出格式:一个正整数p,即较大的那个质数. 第一版代码: # ...