loj6270
#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的更多相关文章
随机推荐
- webpack打包经验——处理打包文件体积过大的问题
前言 最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题. 这里就写一下对于webpack打包优化的一些经验. 主要分为以下几个方面: 去掉开发环境下的配置 Ex ...
- (深度好文)重构CMDB,避免运维之耻
(深度好文)重构CMDB,避免运维之耻 CMDB,几乎是每个运维人都绕不过去的字眼,但又是很多运维人的痛,因为CMDB很少有成功的,因此我也把它称之为运维人的耻辱. 那么到底错在哪儿了?该如何去重构它 ...
- Python-类与对象
类与对象的概念 类即类别.种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 那么问题来了,先有的一个个具体存在的对象(比如一个具 ...
- 线程锁(互斥锁Mutex)及递归锁
一.线程锁(互斥锁) 在一个程序内,主进程可以启动很多个线程,这些线程都可以访问主进程的内存空间,在Python中虽然有了GIL,同一时间只有一个线程在运行,可是这些线程的调度都归系统,操作系统有自身 ...
- shell正则表达
shell正则表达 .*和.?的比较: 比如说匹配输入串A: 101000000000100 使用 1.*1 将会匹配到1010000000001,匹配方法:先匹配至输入串A的最后, 然后向前匹配,直 ...
- Java面试题详解二:java中的关键字
一,final1.被final修饰的类不可以被继承2.被final修饰的方法不可以被重写3.被final修饰的变量不可以被改变 重点就是第三句.被final修饰的变量不可以被改变,什么不可以被改变呢 ...
- git reset的用法
git reset三个选项 --mix,--hard,--soft 数据 针对每个选项都是操作这个文件. [root@centos demo]# git init Initialized empty ...
- MySQL中关于数据类型指定宽度之后的情况
概述 MySQL有很多种数据类型,最常用的就是int,char,varchar,这些类型在创建表的时候都可以指定该字段的宽度,方法是在类型后面加一个括号,括号中写宽度就可以了. 但是,在指定宽度之后, ...
- js 通过url获取里面的参数值
场景描述:当我们从一个页面要带有一两个值跳转到另一个页面,另一个页面要使用这些参数的时候,我们就需要通过js获取这些参数啦. 先贴上代码: function getQueryString(name) ...
- VS如何在调试时进入到dll文件
背景: 项目A:用C#写的一个类库文件 项目B:引用项目A的dll文件,完成编码,也是C#编写的. 需求:怎么能在调试的时候,调试断点能够从项目B中进入项目A中的代码. 解决办法就是: 假设,项 ...