#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. jenkins自动部署应用到tomcat中,编译后shell脚本的简单示例

    jenkins的安装这里就不做描述了,很简单的  百度搜索一下即可 这里安装的jenkins-2.39-1.1 wget http://pkg.jenkins-ci.org/redhat/jenkin ...

  2. Windows 10 配置Linux及安装Docker

    https://baijiahao.baidu.com/s?id=1607159570058814753&wfr=spider&for=pc https://blog.csdn.net ...

  3. vue文档全局api笔记2

    1.Vue.filter( id, [definition] ) 在组件内注册 <template> <div id="app"> <div clas ...

  4. Python_老男孩练习题1

    get有陷阱:value   5.以下打印的内容是:——————    ——————    —————— [10, 'a'] [123] [10, 'a'] #方法一: 将list 转为 set #l ...

  5. java总结:字符串切割

    java中String.split()用法 在java.lang包中有String.split()方法,返回是一个数组.1.“.”和“|”都是转义字符,必须得加"\\"; 所以如果 ...

  6. Prometheus & SoundCloud

    Prometheus 系统监控方案 一 - Vovolie - 博客园https://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html Prometh ...

  7. Satis搭建composer私有库(自定义下载目录)

    在我们的日常php开发中需要使用大量的第三方包和类库, 怎么管理是一个问题, 我们用的Yii2框架, 但是并没有把composer用起来, 由于最近更换为docker部署项目, 于是想起来用compo ...

  8. java代理:静态代理和动态代理

    一.Java中有一个设计模式是代理模式 代理模式是常用的Java设计模式,特征是代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类 ...

  9. 记自己在mybatis中设置jdbcType的一个坑

    项目是用ssm搭建的.主要是为app数据接口.其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate ...

  10. [转帖]Docker四种网络模式

    Docker(十四)-Docker四种网络模式 https://www.cnblogs.com/zhuochong/p/10069293.html 计算机网络相关的知识 非常有用.. Docker 安 ...