http://acm.hdu.edu.cn/showproblem.php?pid=4325

题目意思:

给你N个花开的时间段,然后在有M个时间点,问你在这个时间点有多少花开着。

昨天刚做的一个类似的题,用线段树加离散化,然后赶紧敲,然后错八次。

最后还是没做出来。

那么思路还是线段树加离散化。

题目给的每个花开花谢的范围很大,但花的数目只有1e5,很容易就想到了离散化,然后就是用线段树去处理,找每个花开的段,最后lazy下放到

每个时间点,这样就知道每个时间点开的花数。

这题大致思路是这样的,但你会发现M次查询时,有的时间点,你在离散化时,你没将它加入,所以你在离散化后的数组里找不到这个点。当时没想到将询问的点加入一起离散化,然后各种二分,然并ruan.。

下面给出代码:

  1 /*sjy*/
2 #include<stdio.h>
3 #include<algorithm>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<iostream>
7 #include<math.h>
8 void add(int l,int r,int k,int aa,int dd);
9 int kr(int n,int m,int t);
10 void lazy(int l,int r,int k);
11 int findd(int l,int r,int k,int aa,int dd);
12 int cmp(const void*p,const void*q);
13 /*int er(int n,int m,int t);*/
14 typedef struct pp
15 {
16 int x;
17 int y;
18 }ss;
19 int N,M,V;
20 int tree[8*100005];//线段树数组
21 ss a[100005];
22 ss b[2*100005];
23 int c[2*100005];
24 /*int yk[2*100005];*/
25 int kp[100005];
26 using namespace std;
27 int main(void)
28 {
29 int n,i,j,k,p,q,x,y,s;
30 scanf("%d",&n);
31 for(i=1; i<=n; i++)
32 {
33 memset(tree,0,sizeof(tree));
34 scanf("%d %d",&N,&M);
35 int cnt=0;
36 int sum=-1;
37 for(j=0; j<N; j++)
38 {
39 scanf("%d %d",&a[j].x,&a[j].y);
40 b[cnt].x=a[j].x;
41 cnt++;
42 b[cnt].x=a[j].y;
43 cnt++;
44 if(sum<a[j].y)
45 {
46 sum=a[j].y;
47 }
48 }
49 for(j=0;j<M;j++)
50 {
51 scanf("%d",&kp[j]);
52 b[cnt++].x=kp[j];
53 }//询问的点加入离散化
54 qsort(b,cnt,sizeof(ss),cmp);//排序离散化
55 int vv=0;
56 c[vv]=0;
57 int rr=0;
58 for(j=1; j<cnt; j++)
59 {
60 if(b[j].x!=b[j-1].x)
61 {
62 vv++;
63 c[j]=vv;
64 rr=0;
65 /*yk[j]=rr;*/
66 }
67 else
68 {
69 c[j]=vv;
70 /*yk[j]=rr;*/
71 }
72 }
73 for(j=0; j<N; j++)
74 {
75 x=kr(0,cnt-1,a[j].x);//二分找点
76 y=kr(0,cnt-1,a[j].y);
77 add(x,y,0,0,vv);//线段数更新加段
78 }
79 lazy(0,vv,0);printf("Case #%d:\n",i);
80 for(j=0;j<M;j++)
81 {
82 int uu=kr(0,cnt-1,kp[j]);
83 int yy=findd(uu,uu,0,0,vv);//查询问的时间段因为为点所以l=r
84 printf("%d\n",yy);
85 }
86
87 }
88 return 0;
89
90 }
91 void add(int l,int r,int k,int aa,int dd)//线段数更新
92 {
93 if(l>dd||r<aa)
94 {
95 return ;
96 }
97 else if(l<=aa&&r>=dd)
98 {
99 tree[k]++;
100 }
101 else
102 {
103 add(l,r,2*k+1,aa,(aa+dd)/2);
104 add(l,r,2*k+2,(aa+dd)/2+1,dd);
105 }
106 }
107
108 void lazy(int l,int r,int k)//最后下放操作
109 {
110 if(l==r)
111 {
112 return ;
113 }
114 else
115 {
116 tree[2*k+1]+=tree[k];
117 tree[2*k+2]+=tree[k];
118 lazy(l,(l+r)/2,2*k+1);
119 lazy((l+r)/2+1,r,2*k+2);
120 }
121 }
122
123
124 int findd(int l,int r,int k,int aa,int dd)
125 {
126 if(l>dd||r<aa)
127 {
128 return 0;
129 }
130 else if(l<=aa&&r>=dd)
131 {
132 return tree[k];
133 }
134 else
135 {
136 int nx=findd(l,r,2*k+1,aa,(aa+dd)/2);
137 int ny=findd(l,r,2*k+2,(aa+dd)/2+1,dd);
138 return nx+ny;
139 }
140
141 }
142
143 /*int er(int n,int m,int t)
144 {
145 int y=(n+m)/2;
146 if(b[y].x==t)
147 {
148 return c[y];
149 }
150 if(m<n)
151 {
152 return -1;
153 }
154 if(m==n&&b[m].x!=t)
155 {
156 return -1;
157 }
158
159 else if(m-n==1&&b[n].x<=t&&b[m].x>=t)
160 {
161 V=yk[n];
162 return c[n];
163 }
164 else if(b[y].x<t)
165 {
166 return er(y,m,t);
167 }
168 else return er(n,y,t);
169
170 }*/
171 int kr(int n,int m,int t)//二分找点
172 {
173 int yy=(n+m)/2;
174 if(b[yy].x==t)
175 {
176 return c[yy];
177 }
178 else if(b[yy].x>t)
179 {
180 return kr(n,yy-1,t);
181 }
182 else return kr(yy+1,m,t);
183 }
184 int cmp(const void*p,const void*q)
185 {
186 ss*w=(ss*)p;
187 ss*ww=(ss*)q;
188
189 return w->x-ww->x;
190 }

hdu -4325-Flowers(离散化 线段树)的更多相关文章

  1. hdoj 4325 Flowers【线段树+离散化】

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  2. 离散化+线段树/二分查找/尺取法 HDOJ 4325 Flowers

    题目传送门 题意:给出一些花开花落的时间,问某个时间花开的有几朵 分析:这题有好几种做法,正解应该是离散化坐标后用线段树成端更新和单点询问.还有排序后二分查找询问点之前总花开数和总花凋谢数,作差是当前 ...

  3. 南阳理工 题目9:posters(离散化+线段树)

    posters 时间限制:1000 ms  |  内存限制:65535 KB 难度:6   描述 The citizens of Bytetown, AB, could not stand that ...

  4. SGU 180 Inversions(离散化 + 线段树求逆序对)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...

  5. 【POJ】2528 Mayor's posters ——离散化+线段树

    Mayor's posters Time Limit: 1000MS    Memory Limit: 65536K   Description The citizens of Bytetown, A ...

  6. hpu校赛--雪人的高度(离散化线段树)

    1721: 感恩节KK专场——雪人的高度 时间限制: 1 Sec  内存限制: 128 MB 提交: 81  解决: 35 [提交][状态][讨论版] 题目描述 大雪过后,KK决定在春秋大道的某些区间 ...

  7. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  8. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

  9. 【bzoj4636】蒟蒻的数列 离散化+线段树

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801379.html 题目描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个 ...

  10. Mayor's posters (离散化线段树+对lazy的理解)

    题目 题意: n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围 li,ri(1<=li<=ri<=10000000) .求出最后还能看见多少张海报. 思路: 由于 ...

随机推荐

  1. 解决UE4项目编辑器启动时出现LogLinker: Warning: Failed to load '/Game/FirstPersonBP/FirstPersonOverview': Can't find file.

    UE4版本:4.24.3源码编译版本 Windows10 + VS2019环境 LogLinker: Warning: Failed to load '/Game/FirstPersonBP/Firs ...

  2. cmd到指定目录并执行命令 mysql到bin目录并执行命令 cmd bat进入指定文件夹中并执行命令

    其实就一条命令:(保存为bat格式,注意:有两个and希腊字母 && )cmd /k "cd /d Your ProjectPath&&Your CMD co ...

  3. 在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题

    在调用系统相册时,UIIMagePickerController使用中偷换StatusBar颜色的问题 此时解决办法是 #pragma mark - UIImagePickerController D ...

  4. OC简单介绍

    一.OC与C的对比 关键字 OC新增的关键字在使用时,注意部分关键字以"@"开头 方法->函数 定义与实现 数据类型 新增:BOOL/NSObject/id/SEL/bloc ...

  5. jQuery全局进行方法扩展

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>01 ...

  6. Consumer方法结合Lambda表达式的应用

    package com.itheima.demo05.Consumer;import java.util.function.Consumer;/** * @author newcityman * @d ...

  7. View的简单说明

    一)三个结构体:CGPoint.CGSize.CGRect 1. CGPoint struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CG ...

  8. ThreadLocal的使用方法

    ThreadLocal的使用方法 (2011-10-10 22:05:48) 转载▼     概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个 ...

  9. [HarekazeCTF2019]baby_rop

    看到名字就想到了用rop来做这道题 老样子chescksec和file一下 可以看到是64位的程序开启了nx保护,把程序放到idax64里 可以看到有system和/bin/sh,/bin/sh无法跟 ...

  10. JavaFx WebView使用研究

    原文: JavaFx WebView使用研究 | Stars-One的杂货小窝 本篇是基于TornadoFx框架的基础研究的,示例代码都是Kotlin版本,各位可以看着参考下 WebView中比较重要 ...