传送门

把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序。

注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下:

——————

  ———

    —

然后直接线段树搞就行,先求区间最小值,如果大于零就更新统一减1。

——代码

 #include <cstdio>
#include <iostream>
#include <algorithm>
#define root 1, 1, n
#define ls now << 1, l, mid
#define rs now << 1 | 1, mid + 1, r const int INF = ~( << ), MAXN = ;
int n, m, ans;
int minn[MAXN << ], add[MAXN << ]; struct node
{
int a, b;
}p[MAXN]; inline void swap(int &x, int &y)
{
x ^= y ^= x ^= y;
} inline void push_up(int now)
{
minn[now] = std::min(minn[now << ], minn[now << | ]);
} inline void push_down(int now, int len)
{
if(!add[now]) return;
add[now << ] += add[now];
add[now << | ] += add[now];
minn[now << ] += add[now];
minn[now << | ] += add[now];
add[now] = ;
} inline void build(int now, int l, int r)
{
if(l == r)
{
scanf("%d", &minn[now]);
return;
}
int mid = (l + r) >> ;
build(ls);
build(rs);
push_up(now);
} inline bool cmp(node x, node y)
{
return x.b == y.b ? x.a < y.a : x.b < y.b;
} inline int query(int x, int y, int now, int l, int r)
{
if(x <= l && r <= y) return minn[now];
if(l > y || r < x) return INF;
push_down(now, r - l + );
int mid = (l + r) >> ;
return std::min(query(x, y, ls), query(x, y, rs));
} inline void update(int x, int y, int now, int l, int r)
{
if(x <= l && r <= y)
{
minn[now]--;
add[now]--;
return;
}
if(l > y || r < x) return;
push_down(now, r - l + );
int mid = (l + r) >> ;
update(x, y, ls);
update(x, y, rs);
push_up(now);
} int main()
{
int i, j;
scanf("%d %d", &n, &m);
build(root);
for(i = ; i <= m; i++)
{
scanf("%d %d", &p[i].a, &p[i].b);
if(p[i].a > p[i].b) swap(p[i].a, p[i].b);
}
std::sort(p + , p + m + , cmp);
for(i = ; i <= m; i++)
if(query(p[i].a, p[i].b, root) > )
ans++, update(p[i].a, p[i].b, root);
printf("%d", ans);
return ;
}

[luoguP3606] [USACO17JAN]Building a Tall Barn建谷仓(贪心 + 线段树)的更多相关文章

  1. [USACO17JAN]Building a Tall Barn建谷仓

    题目描述 Farmer John is building a brand new, NNN -story barn, with the help of his KKK cows ( 1≤N≤K≤101 ...

  2. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  3. 【洛谷】【线段树】P1047 校门外的树

    [题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...

  4. 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)

    题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树 ...

  5. 【BZOJ】1696: [Usaco2007 Feb]Building A New Barn新牛舍(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1696 原题要求min(sum{|x-xi|+|y-yi|}),且一定要看题:“没有两头牛的吃草位置是 ...

  6. 洛谷P3374(线段树)(询问区间和,支持单点修改)

    洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...

  7. 洛谷P5280 [ZJOI2019]线段树 [线段树,DP]

    传送门 无限Orz \(\color{black}S\color{red}{ooke}\)-- 思路 显然我们不能按照题意来每次复制一遍,而多半是在一棵线段树上瞎搞. 然后我们可以从\(modify\ ...

  8. BZOJ1828[USACO 2010 Mar Gold 2.Barn Allocation]——贪心+线段树

    题目描述 输入 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i 输出 * 第一行: ...

  9. 洛谷.T21778.过年(线段树 扫描线)

    题目链接或者这吧.. 被数据坑了 /* 操作按左端点排个序 依次进行即可 不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..) 找到 ...

随机推荐

  1. 使用 Realm 和 Swift 创建 ToDo 应用

    原文出处: HOSSAM GHAREEB   译文出处:Prayer’s blog(@EclipsePrayer) 智能手机的快速发展的同时,涌现出了很多对开发者友好的开发工具,这些工具不仅使得开发变 ...

  2. 页面html图片按钮多种写法

    原地址:http://blog.163.com/weison_hi/blog/static/17680404720118534033788/ 第一种: 在一般情况下按钮提交表单: <form i ...

  3. HttpMessageNotWritableException异常解决办法

    昨天做多对多的时遇到这个错误,网上找了一大堆,都没有解决掉,这个异常是说要解析的对象解析不了,就有可能该对象为null了,为了测试,我把数据库的数据都填上去    结果还是报错 看来是时候debug下 ...

  4. java操作Excel、PDF文件

    java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...

  5. tween.js下面的轮播(饿了么点餐的那种效果)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 固定table表头

    <style> #box{ height:214px; width:500px; overflow-y:auto;/** 必须,否则当表格数据过多时,不会产生滚动条,而是自动延长该div的 ...

  7. codevs 1043 方格取数 2000年NOIP全国联赛提高组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...

  8. SQLite概述

    SQLite概述 这个教程帮助您理解SQLite是什么,它如何不同于SQL,为什么它是必要的和它的方式处理应用程序数据库.   SQLite是一个库,实现了一个独立的软件,serverless zer ...

  9. (转)编码剖析Spring依赖注入的原理

    http://blog.csdn.net/yerenyuan_pku/article/details/52834561 Spring的依赖注入 前面我们就已经讲过所谓依赖注入就是指:在运行期,由外部容 ...

  10. 植物大战僵尸游戏的开发(python)

    装备东西: 搭建好python环境, 四张图片,(背景图片,炮弹图片,僵尸图片,豌豆图片),就ok了  没有安装pygame的需要进行安装  pip install pygame 参考视频 # 植物大 ...