传送门

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

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

——————

  ———

    —

然后直接线段树搞就行,先求区间最小值,如果大于零就更新统一减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. ios学习笔记 UITableView(纯代码) (二)

    头文件 --------------------------------------------- #import <UIKit/UIKit.h> /** UITableViewDataS ...

  2. CF778B(round 402 div.2 E) Bitwise Formula

    题意: Bob recently read about bitwise operations used in computers: AND, OR and XOR. He have studied t ...

  3. 【经验总结】OSG 安装配置

    对于普通用户推荐直接下载安装包配置.如有特殊需求或想了解编译过程可参考网上文章自己编译后配置.(通常建议使用第一种方法即可) 本人安装经验: 失败:自己系统64位,VS2010 32位,开始自己动手编 ...

  4. 关于对象.style currentstyle 的区别

    对象.style的方式只能获取行内写法的样式,但是外部引入的或者写在head里面的就无法获取,只能用currentstyle.

  5. mongodb多条件查询总结

    根据两字段乘积过滤查询分页数据 db.cron.aggregate([{$project:{_id:,AppID:,result:{$add:["$endlottery",&quo ...

  6. 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin

    参考:An Efficient Inter Mode Decision Approach for H.264 Video Coding <HEVC标准介绍.HEVC帧间预测论文笔记>系列博 ...

  7. ListView中含有EditText时候--要命的焦点问题迎刃而解

    最近做项目的时候遇到了一个问题,就是在ListView的item上面含有一个EditText,要求是这样: 1当点击item的时候,item可以点击; 2当点击EditText的时候EditText也 ...

  8. du - 报告磁盘空间使用情况

    总览 du [options] [file...] POSIX 选项: [-askx] GNU 选项 (最短格式): [-abcDhHklLmsSxX] [--block-size=size] [-- ...

  9. javascript.json snippets vscode 注释

    vscode vue js里面的注释 javascript.json { // Place your global snippets here. Each snippet is defined und ...

  10. mysql查询速度慢的原因[整理版]

    在以前的博客中陆续记录了有关查询效率方面的文章.今天在整理一下,写上自己的一些心得记录如下:常见查询慢的原因常见的话会有如下几种:1.没有索引或没有用到索引.PS:索引用来快速地寻找那些具有特定值的记 ...