【Luogu1937】仓配置

题面

直接找洛谷把。。。

题解

很明显的贪心吧

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. #include<set>
  8. #include<map>
  9. #include<vector>
  10. using namespace std;
  11. #define MAX 110000
  12. #define lson (now<<1)
  13. #define rson (now<<1|1)
  14. inline int read()
  15. {
  16. int x=0,t=1;char ch=getchar();
  17. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  18. if(ch=='-')t=-1,ch=getchar();
  19. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  20. return x*t;
  21. }
  22. int t[MAX<<2];
  23. int ly[MAX<<2];
  24. int N,M,a[MAX];
  25. void pushdown(int now)
  26. {
  27. int lyy=ly[now];
  28. t[lson]-=lyy;t[rson]-=lyy;
  29. ly[lson]+=lyy;ly[rson]+=lyy;
  30. ly[now]=0;
  31. }
  32. void putlazy(int now)
  33. {
  34. t[now]--;ly[now]++;
  35. }
  36. void build(int now,int l,int r)
  37. {
  38. if(l==r){t[now]=a[l];return;}
  39. int mid=(l+r)>>1;
  40. build(lson,l,mid);build(rson,mid+1,r);
  41. t[now]=min(t[lson],t[rson]);
  42. }
  43. int Query(int now,int l,int r,int al,int ar)
  44. {
  45. if(l==al&&r==ar)return t[now];
  46. if(ly[now])pushdown(now);
  47. int mid=(l+r)>>1;
  48. if(ar<=mid)return Query(lson,l,mid,al,ar);
  49. else if(al>mid)return Query(rson,mid+1,r,al,ar);
  50. else return min(Query(lson,l,mid,al,mid),Query(rson,mid+1,r,mid+1,ar));
  51. }
  52. void Modify(int now,int l,int r,int al,int ar)
  53. {
  54. if(l==al&&r==ar){putlazy(now);return;}
  55. int mid=(l+r)>>1;
  56. if(ly[now])pushdown(now);
  57. if(ar<=mid)Modify(lson,l,mid,al,ar);
  58. else if(al>mid)Modify(rson,mid+1,r,al,ar);
  59. else {Modify(lson,l,mid,al,mid);Modify(rson,mid+1,r,mid+1,ar);}
  60. t[now]=min(t[lson],t[rson]);
  61. }
  62. struct Link
  63. {
  64. int l,r;
  65. }gg[MAX];
  66. inline bool operator <(Link a,Link b)
  67. {
  68. if(a.r!=b.r)return a.r<b.r;
  69. return a.l>b.r;
  70. }
  71. int main()
  72. {
  73. N=read();M=read();
  74. for(int i=1;i<=N;++i)a[i]=read();
  75. for(int i=1;i<=M;++i)gg[i].l=read(),gg[i].r=read();
  76. sort(&gg[1],&gg[M+1]);
  77. build(1,1,N);
  78. int ans=0;
  79. for(int i=1;i<=M;++i)
  80. {
  81. int dd=Query(1,1,N,gg[i].l,gg[i].r);
  82. if(!dd)continue;
  83. ++ans;
  84. Modify(1,1,N,gg[i].l,gg[i].r);
  85. }
  86. cout<<ans<<endl;
  87. return 0;
  88. }

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

  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. LeetCode - 776. Split BST

    Given a Binary Search Tree (BST) with root node root, and a target value V, split the tree into two ...

  2. putty,xshell以及密钥认证:linux学习第二篇

    1.    Putty下载 官网:https://www.chiark.greenend.org 下载putty的zip包 2.    Putty使用 2000为可查看的文件行数,建议设置为2000 ...

  3. ajax常用操作

    load的方法的使用(现在已不常用) <!doctype html><html lang="en"><head> <meta charse ...

  4. Java String使用总结

    1 == 与 equals() 使用==来比较两个primitive主数据类型在意义上相等(是否带有相同的字节组合),或者判断两个引用(如String变量)是否引用同一个对象.使用equals()来判 ...

  5. mac攻略(2) -- apache站点配置

    [http://www.cnblogs.com/redirect/p/6112164.html] Mac OS X 中默认有两个目录可以直接运行你的 Web 程序, 一个是系统级的 Web 根目录:/ ...

  6. 开始使用PHPUnit单元测试

    何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...

  7. Docker镜像的构成__Dockerfile

    相比docker commit来说,Dockerfile的方法会更加自动化,更加方便快捷,而且功能也更强大.拿构建Nginx容器举例. 先创建一个目录 mkdir /opt/docker-file 进 ...

  8. Spring Boot 2.0(二):Spring Boot 2.0尝鲜-动态 Banner

    Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜. 配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发 ...

  9. GB 标准

    std::map<int, std::string> GB2261 = { { 0,"未知的性别" }, { 1,"男性" }, { 2," ...

  10. 历届试题 大臣的旅费 树形DP

    题目链接:大臣的旅费 思路:锦囊说用广搜,可惜这题没说数据范围,担心复杂度太高,我就直接用的树形DP--求树的最远路径. 以城市1为整棵树的根结点,d(i)表示以i为根结点的子树的最远路径,还有一个f ...