#6270. 数据结构板子题

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

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

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline char gc(){
static char buf[],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,,stdin),p1==p2)?EOF:*p1++;
}
#define getchar gc
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,Q,ans[N];
struct Question
{
int l,r,Down,Id;
}Ques[N];
vector<int>Limit1[N],Limit2[N];
struct Xianduan
{
int l,r,Len;
inline bool operator<(const Xianduan &tmp)const
{
return Len<tmp.Len;
}
}Line[N<<];
struct BIT
{
int S[N];
#define lowbit(x) ((x)&(-x))
inline void Ins(int x)
{
for(;x<=n;x+=lowbit(x))
{
++S[x];
}
}
inline int Que(int x)
{
int Sum=;
for(;x;x-=lowbit(x))
{
Sum+=S[x];
}
return Sum;
}
}T1,T2;
int main()
{
register int i,j;
R(n); R(Q);
for(i=;i<=n;i++)
{
R(Line[i].l); R(Line[i].r);
Line[i].Len=Line[i].r-Line[i].l;
}
sort(Line+,Line+n+);
for(i=;i<=Q;i++)
{
R(Ques[i].l); R(Ques[i].r); R(Ques[i].Down); Ques[i].Id=i;
if(Ques[i].r-Ques[i].l>=Ques[i].Down)
{
Limit1[Ques[i].Down-].push_back(i);
Limit2[Ques[i].r-Ques[i].l+].push_back(i);
}
}
register int Pos=,tot=;
for(i=;i<=n;i++) //枚举线段长度
{
while(Pos<=n&&Line[Pos].Len==i)
{
T1.Ins(Line[Pos].l);
T2.Ins(Line[Pos].r);
++tot; ++Pos;
}
for(j=;j<Limit1[i].size();j++)
{
register int o=Limit1[i][j];
ans[o]=ans[o]-tot+T1.Que(Ques[o].l-)+(tot-T2.Que(Ques[o].r));
}
for(j=;j<Limit2[i].size();j++)
{
register int o=Limit2[i][j];
ans[o]=ans[o]+tot-T1.Que(Ques[o].l-)-(tot-T2.Que(Ques[o].r));
}
}
for(i=;i<=Q;i++) Wl(ans[i]);
return ;
}
/*
input
5 5
1 2
1 3
2 3
2 4
2 5
1 5 1
1 4 1
1 5 2
2 5 2
1 5 3
output
5
4
3
2
1
*/

loj6270的更多相关文章

随机推荐

  1. python之type函数

    python 的type 函数 的介绍的   下面就是此函数的参数   三个参数的意义 '''type(class_name, base_class_tuple, attribute_dict)cla ...

  2. SpringBoot整合Shiro使用Ehcache等缓存无效问题

    前言 整合有缓存.事务的spring boot项目一切正常. 在该项目上整合shiro安全框架,发现部分类的缓存Cache不能正常使用. 然后发现该类的注解基本失效,包括事务Transaction注解 ...

  3. 使用webview几种常见的hybrid通信方式

    js 与原生之间的通信: 1.JSbridge::(webviewJavascriptBridge)一种js与原生native通信的机制,可以h5与native互调: 2.Cordova: 核心就是原 ...

  4. 如果需要精确的答案,请避免使用float和double

    Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题.在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上 ...

  5. iOS 传感器集锦

    https://www.jianshu.com/p/5fc26af852b6 传感器集锦:指纹识别.运动传感器.加速计.环境光感.距离传感器.磁力计.陀螺仪   效果预览.gif 一.指纹识别 应用: ...

  6. 线程中的samaphore信号量及event事件

    一.信号量 samaphore: 在程序中意思为同时允许几个线程运行,比如我们去水上乐园的滑梯玩时,有四个滑梯,每一个滑梯上当没有人在中间玩滑下去时才允许上人,四个滑梯1,2,3,4,同时最多四个人, ...

  7. [2017BUAA软工助教]常见问题Q&A

    软工常见问题Q&A 目录: 1. 转会相关 1.1 转会流程是什么样子的? 1.2 团队中多人要求转会怎么办?(如何解散团队) 1.3 为什么有人想要转会? 1.4 软件工程课为什么有这一环节 ...

  8. gin框架学习手册

    前言 gin框架是go语言的一个框架,框架的github地址是:https://github.com/gin-gonic/gin 转载本文,请标注原文地址:https://www.cnblogs.co ...

  9. 关于PHP的那些坑

    因为PHP是弱类型语言,常常会发生许多意想不到的问题,所以,我们再次一一细数这些我们踏过的坑!!! 1) foreach中自动回将key为数值的转化成整型,造成无法匹配 function transl ...

  10. Python + selenium + pycharm 环境部署细节 和selenium、Jenkins简单介绍

    一.测试体系:Python + selenium + pycharm + Jenkins/docker 环境搭建: 1.安装python 3.4/3.5 2/3.6/ 3.7 2.配置环境变量 3.p ...