【Luogu1937】仓配置

题面

直接找洛谷把。。。

题解

很明显的贪心吧

按照线段的右端点为第一关键字,左端点第二关键字排序

然后线段树维护区间最小就可以啦

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
using namespace std;
#define MAX 110000
#define lson (now<<1)
#define rson (now<<1|1)
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int t[MAX<<2];
int ly[MAX<<2];
int N,M,a[MAX];
void pushdown(int now)
{
int lyy=ly[now];
t[lson]-=lyy;t[rson]-=lyy;
ly[lson]+=lyy;ly[rson]+=lyy;
ly[now]=0;
}
void putlazy(int now)
{
t[now]--;ly[now]++;
}
void build(int now,int l,int r)
{
if(l==r){t[now]=a[l];return;}
int mid=(l+r)>>1;
build(lson,l,mid);build(rson,mid+1,r);
t[now]=min(t[lson],t[rson]);
}
int Query(int now,int l,int r,int al,int ar)
{
if(l==al&&r==ar)return t[now];
if(ly[now])pushdown(now);
int mid=(l+r)>>1;
if(ar<=mid)return Query(lson,l,mid,al,ar);
else if(al>mid)return Query(rson,mid+1,r,al,ar);
else return min(Query(lson,l,mid,al,mid),Query(rson,mid+1,r,mid+1,ar));
}
void Modify(int now,int l,int r,int al,int ar)
{
if(l==al&&r==ar){putlazy(now);return;}
int mid=(l+r)>>1;
if(ly[now])pushdown(now);
if(ar<=mid)Modify(lson,l,mid,al,ar);
else if(al>mid)Modify(rson,mid+1,r,al,ar);
else {Modify(lson,l,mid,al,mid);Modify(rson,mid+1,r,mid+1,ar);}
t[now]=min(t[lson],t[rson]);
}
struct Link
{
int l,r;
}gg[MAX];
inline bool operator <(Link a,Link b)
{
if(a.r!=b.r)return a.r<b.r;
return a.l>b.r;
}
int main()
{
N=read();M=read();
for(int i=1;i<=N;++i)a[i]=read();
for(int i=1;i<=M;++i)gg[i].l=read(),gg[i].r=read();
sort(&gg[1],&gg[M+1]);
build(1,1,N);
int ans=0;
for(int i=1;i<=M;++i)
{
int dd=Query(1,1,N,gg[i].l,gg[i].r);
if(!dd)continue;
++ans;
Modify(1,1,N,gg[i].l,gg[i].r);
}
cout<<ans<<endl;
return 0;
}

【Luogu1937】仓配置(贪心,线段树)的更多相关文章

  1. [luoguP3606] [USACO17JAN]Building a Tall Barn建谷仓(贪心 + 线段树)

    传送门 把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序. 注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下: —————— ———  — ...

  2. BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库

    正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...

  3. 【题解】P1712 [NOI2016]区间(贪心+线段树)

    [题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...

  4. Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)

    题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...

  5. poj 2010 Moo University - Financial Aid (贪心+线段树)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 骗一下访问量.... 题意大概是:从c个中选出n个 ...

  6. Codeforces 626G Raffles(贪心+线段树)

    G. Raffles time limit per test:5 seconds memory limit per test:256 megabytes input:standard input ou ...

  7. UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化

    题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值 ...

  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. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

    题意 这一天,\(\mathrm{Konano}\) 接到了一个任务,他需要给正在制作中的游戏 \(\mathrm{<IIIDX>}\) 安排曲目 的解锁顺序.游戏内共有\(n\) 首曲目 ...

  10. 2019.01.22 hdu5195 DZY Loves Topological Sorting(贪心+线段树)

    传送门 题意简述:给出一张DAGDAGDAG,要求删去不超过kkk条边问最后拓扑序的最大字典序是多少. 思路:贪心帮当前不超过删边上限且权值最大的点删边,用线段树维护一下每个点的入度来支持查询即可. ...

随机推荐

  1. Git .gitignore文件的使用

    本文转载自 http://blog.csdn.net/xmyzlz/article/details/8592302 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .giti ...

  2. Ubuntu轻松编译openJDK

    花了三天在windows上搞openJDK,对bash本来就不熟,加上各种莫名依赖和脚本里的bug,身心俱疲.最后make all的时候产生一个莫名其妙的错误说什么有warning且-Werror置为 ...

  3. 老生常谈,函数柯里化(curring)

    柯里化这个概念确实晦涩难懂,没有深入思考过的人其实真的很难明白这是一个什么东西.看起来简单.简单到或许只需要一行代码: const curry = fn => (…args) => fn. ...

  4. LVM : 简介

    在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小.而使用 fdisk.gdisk 等工具对磁盘分区后,每个分区的大小就固定了.如果分区设置的过大,就白白浪费了磁盘空间:如果分区设置 ...

  5. 写入mssql出现乱码

    1.出现乱码的场景如下: --------------------------------------------------------------------------------------- ...

  6. Netdata---Linux系统性能实时监控平台部署记录

    通常来说,作为一个Linux的SA,很有必要掌握一个专门的系统监控工具,以便能随时了解系统资源的占用情况.下面就介绍下一款Linux性能实时监测工具-Netdata,它是Linux系统实时性能监测工具 ...

  7. C. Make It Equal

    链接 [http://codeforces.com/contest/1065/problem/C] 题意 给你n个高度hi的塔,让你把高的部分切掉,使得最后所有塔一样高,而且每次切的高度之和不大于k ...

  8. 《linux内核设计与实现》第十八章

    第十八章 调试 调试工作艰难是内核级开发区别于用户级开发的一个显著特点. 一.准备开始 1.内和调试需要什么 一个bug(大部分bug通常都不是行为可靠而且定义明确的) 一个藏匿bug的内核版本(知道 ...

  9. 安装tesserocr错误(未解决)

    在win10下使用pip install tesserocr安装时,始终报错,未解决问题 解压tesserocr-2.2.2.tar.gz该文件夹后,查看setup.py文件,发现似乎model只能再 ...

  10. .NET组件介绍系列

    一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)http://www.cnblogs.com/pengze0902/p/6122311.html 高效而稳定的企业级.NET Offi ...