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长海报 ...
随机推荐
- storm是怎样保证at least once语义的
背景 本篇看看storm是通过什么机制来保证消息至少处理一次的语义的. storm中的一些原语 要说明上面的问题,得先了解storm中的一些原语,比方: tuple和message 在storm中,消 ...
- WPF触发器(Trigger、DataTrigger、EventTrigger)
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- HBase GC日志
HBase依靠ZooKeeper来感知集群成员及其存活性.假设一个server暂停了非常长时间,它将无法给ZooKeeper quorum发送心跳信息,其他server会觉得这台server已死亡.这 ...
- 九度OJ 1136:Number Steps(步数) (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:691 解决:412 题目描述: Starting from point (0,0) on a plane, we have written ...
- pdf文件的作成
Dim Report As New crProgressList Report.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.P ...
- log4j(转)
让System.out.println回家种田,换句话说,就是该干嘛干嘛去. 您可能在想: System.out.println几乎在每个Java程序里都有那么几行,如何让他老人家回家种田呢? 我们怎 ...
- LVS项目介绍
LVS项目介绍 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Serve ...
- 常用的ES6
1 let 和 const 作用域: 只在声明指令的块级作用域内有效.① let所声明的变量可以改变,值和类型都可以改变,没有限制. let a = 123 a = 456 // 正确,可以改变 le ...
- Bestcoder round 18----B题(一元三次方程确定区间的最大值(包含极值比较))
Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- UVA10518 How Many Calls? —— 矩阵快速幂
题目链接:https://vjudge.net/problem/UVA-10518 题解: 问:求斐波那契数f[n]的时候调用了多少次f[n] = f[n-1] + f[n-2],没有记忆化,一直递归 ...