#6270. 数据结构板子题

sol:对于一个询问L,R,Limit,答案就是所有长度小于R-l+1的线段-长度小于Limit的线段-左端点在L左边的线段-右端点在R右边的线段,求这个东西

后面两个东西可以十分容易的用两棵树状数组维护,但是直接搞得话长度小于Limit且不在区间[L,R]中的区间会被减两遍,把他们加上去即可

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef int ll;
  4. inline char gc(){
  5. static char buf[],*p1=buf,*p2=buf;
  6. return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
  7. }
  8. #define getchar gc
  9. inline ll read()
  10. {
  11. ll s=;
  12. bool f=;
  13. char ch=' ';
  14. while(!isdigit(ch))
  15. {
  16. f|=(ch=='-'); ch=getchar();
  17. }
  18. while(isdigit(ch))
  19. {
  20. s=(s<<)+(s<<)+(ch^); ch=getchar();
  21. }
  22. return (f)?(-s):(s);
  23. }
  24. #define R(x) x=read()
  25. inline void write(ll x)
  26. {
  27. if(x<)
  28. {
  29. putchar('-'); x=-x;
  30. }
  31. if(x<)
  32. {
  33. putchar(x+''); return;
  34. }
  35. write(x/);
  36. putchar((x%)+'');
  37. return;
  38. }
  39. #define W(x) write(x),putchar(' ')
  40. #define Wl(x) write(x),putchar('\n')
  41. const int N=;
  42. int n,Q,ans[N];
  43. struct Question
  44. {
  45. int l,r,Down,Id;
  46. }Ques[N];
  47. vector<int>Limit1[N],Limit2[N];
  48. struct Xianduan
  49. {
  50. int l,r,Len;
  51. inline bool operator<(const Xianduan &tmp)const
  52. {
  53. return Len<tmp.Len;
  54. }
  55. }Line[N<<];
  56. struct BIT
  57. {
  58. int S[N];
  59. #define lowbit(x) ((x)&(-x))
  60. inline void Ins(int x)
  61. {
  62. for(;x<=n;x+=lowbit(x))
  63. {
  64. ++S[x];
  65. }
  66. }
  67. inline int Que(int x)
  68. {
  69. int Sum=;
  70. for(;x;x-=lowbit(x))
  71. {
  72. Sum+=S[x];
  73. }
  74. return Sum;
  75. }
  76. }T1,T2;
  77. int main()
  78. {
  79. register int i,j;
  80. R(n); R(Q);
  81. for(i=;i<=n;i++)
  82. {
  83. R(Line[i].l); R(Line[i].r);
  84. Line[i].Len=Line[i].r-Line[i].l;
  85. }
  86. sort(Line+,Line+n+);
  87. for(i=;i<=Q;i++)
  88. {
  89. R(Ques[i].l); R(Ques[i].r); R(Ques[i].Down); Ques[i].Id=i;
  90. if(Ques[i].r-Ques[i].l>=Ques[i].Down)
  91. {
  92. Limit1[Ques[i].Down-].push_back(i);
  93. Limit2[Ques[i].r-Ques[i].l+].push_back(i);
  94. }
  95. }
  96. register int Pos=,tot=;
  97. for(i=;i<=n;i++) //枚举线段长度
  98. {
  99. while(Pos<=n&&Line[Pos].Len==i)
  100. {
  101. T1.Ins(Line[Pos].l);
  102. T2.Ins(Line[Pos].r);
  103. ++tot; ++Pos;
  104. }
  105. for(j=;j<Limit1[i].size();j++)
  106. {
  107. register int o=Limit1[i][j];
  108. ans[o]=ans[o]-tot+T1.Que(Ques[o].l-)+(tot-T2.Que(Ques[o].r));
  109. }
  110. for(j=;j<Limit2[i].size();j++)
  111. {
  112. register int o=Limit2[i][j];
  113. ans[o]=ans[o]+tot-T1.Que(Ques[o].l-)-(tot-T2.Que(Ques[o].r));
  114. }
  115. }
  116. for(i=;i<=Q;i++) Wl(ans[i]);
  117. return ;
  118. }
  119. /*
  120. input
  121. 5 5
  122. 1 2
  123. 1 3
  124. 2 3
  125. 2 4
  126. 2 5
  127. 1 5 1
  128. 1 4 1
  129. 1 5 2
  130. 2 5 2
  131. 1 5 3
  132. output
  133. 5
  134. 4
  135. 3
  136. 2
  137. 1
  138. */

loj6270的更多相关文章

随机推荐

  1. machine learning[GMM-EM]

    介绍下EM算法和GMM模型,先简单介绍GMM的物理意义,然后给出最直接的迭代过程:然后再介绍EM. 1 高斯混合模型 高斯分布,是统计学中的模型,其输出值表示当前输入数据样本(一维标量,多维向量)的概 ...

  2. HTML5事件

    Html5事件 contextmenu事件 用以表示何时应该显示上下文菜单,以便开发人员取消默认的上下文菜单而提供自定义的菜单. 由于此事件时冒泡的,因此可以为document指定一个事件处理程序,用 ...

  3. .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现

    前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...

  4. CSS Modules入门教程

    为什么引入CSS Modules 或者可以这么说,CSS Modules为我们解决了什么痛点.针对以往我写网页样式的经验,具体来说可以归纳为以下几点: 全局样式冲突 过程是这样的:你现在有两个模块,分 ...

  5. 容器化 — 基于Docker技术容器云

    导读:本文介绍了基于Docker技术的企业级应用容器平台,从云的定义.云服务分类,到用友云PaaS基础平台.平台总体架构.架构预览.部署架构.平台核心价值和核心竞争力,阐述PaaS基础平台成为广大传统 ...

  6. Linux 下面 PG 的 uuid-ossp 包安装办法

    1. pgsql 安装 时报错, 如图示: 详细信息为: 执行SQL为: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 错误纤细信息为: C ...

  7. Redis 安装学习

    Linux下下载安装redis https://redis.io/download tar -zvxf redisxxx cd redisxxxx make  ---进行安装 vim ~.bash_p ...

  8. Java8 Stream实例--统计出所有含‘张’字的人员的平均年龄

    package com.zhangxueliang.demo; import java.util.ArrayList; import java.util.List; import java.util. ...

  9. PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

    目录 1 array_reduce函数法 2 array_walk_recursive函数法 3 array_map函数法 假设有下面一个二维数组: $user = array( '0' => ...

  10. 腾讯机试题 AcWing 603 打怪兽

    题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...