lightoj 1089 【离散化+线段树】
题意:
给你n个区间,然后给你m个i点问你这个点在几个所给定的区间里;
思路:
离散化+区间覆盖
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=5e4+10; struct SegT{
int left,right;
int val;
int flag;
};
SegT q[N*12];
int n,Q;
int arr[N*4]; void Build(int num,int L,int R)
{
q[num].left=L;
q[num].right=R;
q[num].flag=q[num].val=0;
if(L==R)
return;
int mid=(L+R)/2;
Build(2*num, L,mid);
Build(2*num+1,mid+1,R);
} void Pushdown(int num)
{
if(q[num].flag)
{
q[2*num].val+=(q[2*num].right-q[2*num].left+1)*q[num].flag;
q[2*num+1].val+=(q[2*num+1].right-q[2*num+1].left+1)*q[num].flag;
q[2*num].flag+=q[num].flag;
q[2*num+1].flag+=q[num].flag;
q[num].flag=0;
}
} void Update(int num,int s,int t)
{
if(q[num].left>=s&&q[num].right<=t)
{
q[num].flag+=1;
q[num].val+=(q[num].right-q[num].left+1); //wa在了这里。。只要加1就行了,无奈给乘了。。。q[num].flag...不过还是有长进///
return;
}
Pushdown(num);
int mid=(q[num].left+q[num].right)/2;
if(mid>=t)
Update(2*num,s,t);
else if(mid<s)
Update(2*num+1,s,t);
else
{
Update(2*num,s,mid);
Update(2*num+1,mid+1,t);
}
q[num].val=q[2*num].val+q[2*num+1].val;
} int query(int num,int id)
{
if(q[num].left==id&&q[num].left==q[num].right)
return q[num].val;
Pushdown(num);
int mid=(q[num].right+q[num].left)/2;
if(mid>=id)
return query(2*num,id);
else
return query(2*num+1,id);
} vector<int>xs;
int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&Q);
xs.clear();
for(int i=1;i<=2*n;i+=2)
{
scanf("%d%d",&arr[i],&arr[i+1]);
xs.push_back(arr[i]);
xs.push_back(arr[i+1]);
}
for(int i=1;i<=Q;i++)
{
scanf("%d",&arr[i+2*n]);
xs.push_back(arr[i+2*n]);
}
int num=0;
sort(xs.begin(),xs.end());
vector<int>::iterator e=unique(xs.begin(),xs.end());
for(int i=1;i<=2*n+Q;i++)
{
arr[i]=lower_bound(xs.begin(),e,arr[i])-xs.begin()+1;
num=max(num,arr[i]);
}
Build(1,1,num); for(int i=1;i<=2*n;i+=2)
Update(1,arr[i],arr[i+1]); printf("Case %d:\n",cas++);
for(int i=1;i<=Q;i++)
printf("%d\n",query(1,arr[i+2*n]));
}
return 0;
} /*
5 4
6 12
8 8
10 12
8 11
0 12
11
12
2
20 3 3
1 3
2 4
5 6
1
2
3
*/
lightoj 1089 【离散化+线段树】的更多相关文章
- 南阳理工 题目9:posters(离散化+线段树)
posters 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 The citizens of Bytetown, AB, could not stand that ...
- SGU 180 Inversions(离散化 + 线段树求逆序对)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...
- 【POJ】2528 Mayor's posters ——离散化+线段树
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Description The citizens of Bytetown, A ...
- hpu校赛--雪人的高度(离散化线段树)
1721: 感恩节KK专场——雪人的高度 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 35 [提交][状态][讨论版] 题目描述 大雪过后,KK决定在春秋大道的某些区间 ...
- 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树
[BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...
- 【bzoj4636】蒟蒻的数列 离散化+线段树
原文地址:http://www.cnblogs.com/GXZlegend/p/6801379.html 题目描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个 ...
- 离散化+线段树/二分查找/尺取法 HDOJ 4325 Flowers
题目传送门 题意:给出一些花开花落的时间,问某个时间花开的有几朵 分析:这题有好几种做法,正解应该是离散化坐标后用线段树成端更新和单点询问.还有排序后二分查找询问点之前总花开数和总花凋谢数,作差是当前 ...
- Mayor's posters (离散化线段树+对lazy的理解)
题目 题意: n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围 li,ri(1<=li<=ri<=10000000) .求出最后还能看见多少张海报. 思路: 由于 ...
- 干物妹小埋 (离散化 + 线段树 + DP)
链接:https://ac.nowcoder.com/acm/contest/992/B来源:牛客网 题目描述 在之前很火的一个动漫<干物妹小埋>中,大家对小埋打游戏喝可乐的印象十分的深刻 ...
- poj/OpenJ_Bailian - 2528 离散化+线段树
传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...
随机推荐
- TCP协议和socket API 学习笔记
本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilb ...
- Redis(一)基础数据结构
1.目录 Redis 基础数据结构 string (字符串) list (列表) hash (字典) set (集合) zset (集合) 容器型数据结构的通用规则 过期时间 2.Redis 基础数据 ...
- GNU linux 中makefile那点事
转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...
- PAT 天梯赛 L2-013. 红色警报 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L2-013 思路 可以通过图的连通块个数来判断 假如 一座城市的失去 改变了其他城市之间的连通性 那么 这座城市本来 ...
- SIP学习笔记 -- RFC 3261
1.SDP (rfc 4566) 1)用于交换参数 2)内容分三部分Session description, Time description and Media description ...
- Linux升级安装GCC G++ 6.2
使用yum安装是不可能了,各大仓库也没有,只能自己编译安装了. 系统为CentOS 6.5,gcc为4.4.7 1 下载源代码包 当前最新版为6.2: wget http://ftp.gnu.org/ ...
- OpenGL之坐标转换(好文-清晰版)
http://blog.csdn.net/zhongjling/article/details/8488844OpenGL之坐标转换(好文-清晰版)
- PYTHON 爬虫笔记一:爬虫基本原理梳理
知识点一:爬虫的基本原理梳理 一.什么是爬虫? 请求网站并提取数据的自动化程序 二.爬虫的基本流程 1:向服务器发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的 ...
- 字面量(literal)与 C 语言复合字面量(compound literals)
在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)(字面量是相对变量常量等定义的,无论是常量还是变量,其值在某一时刻总是确定的,只是变量可以反复赋值.刷新 ...
- 机器学习: 特征脸算法 EigenFaces
人脸识别是机器学习和机器视觉领域非常重要的一个研究方向,而特征脸算法是人脸识别里非常经典的一个算法,EigenFaces 是基于PCA (principal component analysis) 即 ...