题意:

      x轴上有一些矩形,问你这些矩形覆盖的面积和是多少。

思路:

      首先范围很大,n很小,果断离散化,然后我们就是求出任意区间的最大值作为当前区间的高,最后在算一遍答案就行了,一开始超时了,离散化的时候用map了,后来改成二分就ac了,感觉题目不是很难,明天得开始学习学习扫描线了,还不知道什么是扫描线呢。


#include<stdio.h>
#include<string.h>
#include<algorithm> #define lson l ,mid ,t << 1
#define rson mid + 1 ,r ,t << 1 | 1 using namespace std; typedef struct
{
__int64 a ,b ,c;
}EDGE; EDGE edge[44000]; __int64 Max[330000];
__int64 mark[330000];
__int64 tmp[88000];
__int64 num[88000];
__int64 hash[880000]; __int64 maxx(__int64 x ,__int64 y)
{
return x > y ? x : y;
} void Pushup(__int64 t)
{
Max[t] = maxx(Max[t<<1] ,Max[t<<1|1]);
} void Pushdown(__int64 t)
{
if(mark[t])
{
mark[t<<1] = maxx(mark[t<<1] ,mark[t]);
mark[t<<1|1] = maxx(mark[t<<1|1] ,mark[t]);
Max[t<<1] = maxx(Max[t<<1] ,mark[t]);
Max[t<<1|1] = maxx(Max[t<<1|1] ,mark[t]);
mark[t] = 0;
}
} void BuidTree()
{
memset(Max ,0 ,sizeof(Max));
memset(mark ,0 ,sizeof(mark));
} void Update(__int64 l ,__int64 r ,__int64 t ,__int64 a ,__int64 b ,__int64 c)
{
if(a <= l && b >= r)
{
Max[t] = maxx(Max[t] ,c);
mark[t] = maxx(mark[t] ,c);
return;
}
Pushdown(t);
__int64 mid = (l + r) >> 1;
if(a <= mid) Update(lson ,a ,b ,c);
if(b > mid) Update(rson ,a ,b ,c);
Pushup(t);
} __int64 Query(__int64 l ,__int64 r ,__int64 t ,__int64 a)
{
if(l == r) return Max[t];
Pushdown(t);
__int64 mid = (l + r) >> 1;
if(a <= mid) return Query(lson ,a);
else return Query(rson ,a);
} __int64 search2(__int64 n ,__int64 now)
{
__int64 low ,up ,mid ,ans;
low = 1 ,up = n;
while(low <= up)
{
mid = (low + up) >> 1;
if(now <= num[mid])
{
ans = mid;
up = mid - 1;
}
else low = mid + 1;
}
return ans;
} int main ()
{
__int64 n ,i;
while(~scanf("%I64d" ,&n))
{
__int64 id = 0;
for(i = 1 ;i <= n ;i ++)
{
scanf("%I64d %I64d %I64d" ,&edge[i].a ,&edge[i].b ,&edge[i].c);
tmp[++id] = edge[i].a;
tmp[++id] = edge[i].b;
}
sort(tmp + 1 ,tmp + id + 1);
tmp[0] = -1;
for(id = 0 ,i = 1 ;i <= n * 2 ;i ++)
{
if(tmp[i] == tmp[i-1]) continue;
num[++id] = tmp[i];
} BuidTree(); for(i = 1 ;i <= n ;i ++)
{
__int64 a = search2(id ,edge[i].a);
__int64 b = search2(id ,edge[i].b);
Update(1 ,id ,1 ,a + 1 ,b ,edge[i].c);
} __int64 ans = 0;
for(i = 2 ;i <= id ;i ++)
{
__int64 now = Query(1 ,id ,1 ,i);
now = (num[i] - num[i-1]) * now;
ans += now;
}
printf("%I64d\n" ,ans);
}
return 0;
}

POJ3277 线段树段更新,点询问+二分离散化+暴力的更多相关文章

  1. UVA11992不错的线段树段更新

    题意:       给你一个矩阵,最大20*50000的,然后有三个操作 1 x1 y1 x2 y2 v  把子矩阵的值全部都加上v 2 x1 y1 x2 y2 v  把子矩阵的值全部都变成v 2 x ...

  2. hdu1556 线段树段更新(简单题)

    题意: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个 ...

  3. hdu4267线段树段更新,点查找,55棵线段树.

    题意:      给你N个数,q组操作,操作有两种,查询和改变,查询就是查询当前的这个数上有多少,更改是给你a b k c,每次从a到b,每隔k的数更改一次,之间的数不更改,就相当于跳着更新. 思路: ...

  4. poj-----(2528)Mayor's posters(线段树区间更新及区间统计+离散化)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 43507   Accepted: 12693 ...

  5. POJ2528线段树段更新逆序异或(广告牌)

    题意:      可以这样理解,有一条直线,然后用n条线段去覆盖,最后问全部都覆盖完之后还有多少是没有被完全覆盖的. 思路:      一开始想的有点偏,想到起点排序,然后..失败了,原因是忘记了题目 ...

  6. 线段树区间更新,区间统计+离散化 POJ 2528 Mayor&#39;s posters

    题意:有一个非常长的板子(10000000长),在上面贴n(n<=10000)张海报.问最后从外面能看到几张不同的海报. 由于板子有10000000长,直接建树肯定会爆,所以须要离散化处理,对于 ...

  7. hdu6070(分数规划/二分+线段树区间更新,区间最值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 给出一个题目提交序列, 从中选出一个正确率最小的子串. 选中的子串中每个题目当且仅当最 ...

  8. HDU 1166 敌兵布阵(线段树单点更新,板子题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. UESTC 1591 An easy problem A【线段树点更新裸题】

    An easy problem A Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others ...

随机推荐

  1. 2020年12月-第02阶段-前端基础-Day06

    CSS Day06 定位(position) 理解 能说出为什么要用定位 能说出定位的4种分类 能说出四种定位的各自特点 能说出我们为什么常用子绝父相布局 应用 能写出淘宝轮播图布局 1. CSS 布 ...

  2. xss靶场大通关(持续更新ing)

      xss秘籍第一式(常弹) (1)进入自己搭建的靶场,发现有get请求,参数为name,可进行输入,并会将输入的内容显示于网页页面 (2)使用xss的payload进行通关: http://127. ...

  3. Java高并发编程基础三大利器之CountDownLatch

    引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...

  4. JS逆向-抠代码的第二天【手把手学会抠代码】

    今天的学习项目:沃支付:https://epay.10010.com/auth/login 清空浏览器缓存后,打开网页,输入手机号,密码222222,按照网站要求填入验证码(sorry,我没有账号密码 ...

  5. python常见错误和异常

    1.BaseExeception 所有异常的基类 2.SystemEixt 解释器请求退出 3.KeyboardInterrupt 用户中断执行 4.Exception 常规错误的基类 5.StopI ...

  6. golang 性能调优分析工具 pprof(下)

    golang 性能调优分析工具 pprof(上)篇, 这是下篇. 四.net/http/pprof 4.1 代码例子 1 go version go1.13.9 把上面的程序例子稍微改动下,命名为 d ...

  7. Android Studio 之 在活动中使用 Toast

    •简介 Toast 是 Android 系统提供的一种非常好的提醒方式: 在程序中可以使用它将一些短小的信息通知给用户: 这些信息会在一段时间内自动消失,并且不会占用任何屏幕空间 •Toast.mak ...

  8. MyBatis笔记(三)

    1. ResultMap 查询结果为null:要解决属性和字段名不一致的问题 我们先来看下步骤: 数据库中的字段名 Java中的实体类 public class User {    private i ...

  9. 「新特性」Spring Boot 全局懒加载机制了解一下

    关于延迟加载 在 Spring 中,默认情况下所有定的 bean 及其依赖项目都是在应用启动时创建容器上下文是被初始化的.测试代码如下: @Slf4j @Configuration public cl ...

  10. 【CTF】XCTF Misc 心仪的公司 & 就在其中 writeup

    前言 这两题都是Misc中数据包的题目,一直觉得对数据包比较陌生,不知道怎么处理. 这里放两道题的wp,第一题strings命令秒杀觉得非常优秀,另外一题有涉及RSA加密与解密(本文不具体讨论RSA非 ...