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的更多相关文章
随机推荐
- machine learning[GMM-EM]
介绍下EM算法和GMM模型,先简单介绍GMM的物理意义,然后给出最直接的迭代过程:然后再介绍EM. 1 高斯混合模型 高斯分布,是统计学中的模型,其输出值表示当前输入数据样本(一维标量,多维向量)的概 ...
- HTML5事件
Html5事件 contextmenu事件 用以表示何时应该显示上下文菜单,以便开发人员取消默认的上下文菜单而提供自定义的菜单. 由于此事件时冒泡的,因此可以为document指定一个事件处理程序,用 ...
- .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现
前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...
- CSS Modules入门教程
为什么引入CSS Modules 或者可以这么说,CSS Modules为我们解决了什么痛点.针对以往我写网页样式的经验,具体来说可以归纳为以下几点: 全局样式冲突 过程是这样的:你现在有两个模块,分 ...
- 容器化 — 基于Docker技术容器云
导读:本文介绍了基于Docker技术的企业级应用容器平台,从云的定义.云服务分类,到用友云PaaS基础平台.平台总体架构.架构预览.部署架构.平台核心价值和核心竞争力,阐述PaaS基础平台成为广大传统 ...
- Linux 下面 PG 的 uuid-ossp 包安装办法
1. pgsql 安装 时报错, 如图示: 详细信息为: 执行SQL为: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 错误纤细信息为: C ...
- Redis 安装学习
Linux下下载安装redis https://redis.io/download tar -zvxf redisxxx cd redisxxxx make ---进行安装 vim ~.bash_p ...
- Java8 Stream实例--统计出所有含‘张’字的人员的平均年龄
package com.zhangxueliang.demo; import java.util.ArrayList; import java.util.List; import java.util. ...
- PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)
目录 1 array_reduce函数法 2 array_walk_recursive函数法 3 array_map函数法 假设有下面一个二维数组: $user = array( '0' => ...
- 腾讯机试题 AcWing 603 打怪兽
题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...