01Sequence

题目大意

构造一个满足 \(m\) 个形如 \((l,r,x)\) 的限制条件的 \(01\) 序列,其中 \((l,r,x)\) 表示区间 \([l,r]\) 的和不小于 \(x\),你需要保证序列中 \(1\) 的个数最小。

思路分析

贪心的想,如果我们将限制按右端点排序,那么当遍历到一个区间,发现现有的和不满足限制条件时,一定会从右往左放 \(1\) 直到满足条件,因为只有这样才能让后面的区间放的 \(1\) 更少。

具体过程的实现可以用链表或并查集,也可以用二分套树状数组实现。

代码

  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cstdio>
  6. using namespace std;
  7. const int N=200100;
  8. int n,m,in1,in2,in3;
  9. int res[N];
  10. struct BIT{
  11. int a[N];
  12. #define lowbit(x) ((x)&(-(x)))
  13. void add(int x,int v){
  14. for(int i=x;i<=n+1;i+=lowbit(i)) a[i]+=v;
  15. }
  16. int ask(int x){
  17. int ans=0;
  18. for(int i=x;i;i-=lowbit(i)) ans+=a[i];
  19. return ans;
  20. }
  21. }tree;
  22. struct Node{
  23. int l,r,x;
  24. }a[N];
  25. bool cmp(Node a,Node b){//按右端点从小到大排序
  26. if(a.r!=b.r) return a.r<b.r;
  27. return a.l<b.l;
  28. }
  29. int find(int i){//对于当前的区间二分出下一个应该放的位置
  30. int l=a[i].l,r=a[i].r;
  31. while(l<r){
  32. int mid=(l+r+1)>>1;
  33. if(tree.ask(r)-tree.ask(mid-1)==r-mid+1) r=mid-1;//右半部分放满了
  34. else l=mid;
  35. }
  36. return l;
  37. }
  38. int main(){
  39. scanf("%d%d",&n,&m);
  40. for(int i=1;i<=m;i++){
  41. scanf("%d%d%d",&in1,&in2,&in3);
  42. a[i]=Node{in1,in2,in3};
  43. }
  44. sort(a+1,a+m+1,cmp);
  45. for(int i=1;i<=m;i++){
  46. int num=a[i].x-(tree.ask(a[i].r)-tree.ask(a[i].l-1)),pos;//找到还差多少
  47. while(num>0){tree.add((pos=find(i)),1);res[pos]=1;num--;}//逐一填充
  48. }
  49. for(int i=1;i<=n;i++) cout<<res[i]<<' ';
  50. return 0;
  51. }

[ABC216G] 01Sequence 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. SQL SERVER 拼接字符串转化为表结构数据

    本文为一些需要对特殊符号分隔的字符串进行解析,比如将 select '10,20,30,40,50,60' 这个字符串转化为一列多行 下面提供源代码: 1 SET QUOTED_IDENTIFIER ...

  2. minipc安装与设置Ubuntu

    此文章是对刚刚在某宝买的minipc进行的Ubuntu server安装,以及部分应用过程 安装Ubuntu server22 参考一文搞懂Ubuntu Server 22.04.2安装 问题记录 开 ...

  3. expect: telnet2switch

    #!/usr/bin/expect if {$argc != 1} { puts "usage: ./telnet2sswitch <r2|r3>" exit } if ...

  4. log4j2---基于vulhub的log4j2漏洞复现---反弹shell

    基于vulhub的log4j2漏洞复现---反弹shell 1.方法一 环境准备: 和我上一篇fastjson1.2.24漏洞复现是一样的环境,方法也差别不大 声明:遵纪守法,仅作学习记录用处,部分描 ...

  5. springboot整合mqtt 消费端

    用到的工具: EMQX , mqttx , idea 工具使用都很简单,自己看看就能会. 订阅端config代码: package com.example.demo.config; import lo ...

  6. python:时间模块dateutil

    安装 pip install python-dateutil dateutil模块主要有两个函数,parser和rrule. 其中parser是根据字符串解析成datetime,而rrule则是根据定 ...

  7. .Net Web API 004 Controller获取对象列表,传入数据以及对象

    1.返回UserEntityList 这个服务接口的目的是分为用户列表,代码如下所示. /// <summary> /// 得到用户列表 /// </summary> /// ...

  8. WindowsServer安装sshd服务

    系统版本:Windows Server 2016(有桌面) 网上有不少教程是用powershell在线安装,实测在server 2016上不行,但在Windows 10测试可行,不知道什么情况,所以改 ...

  9. jmeter对请求响应结果进行整段内容提取方法

    通过正则表达式提取器,将上一个请求(A请求)响应数据中的整段内容提取,传给下一个需要该提取数据的请求(B请求). 1. 请求接口响应结果 2. 添加正则表达式提取器 设置变量名为"tt&qu ...

  10. SpringBoot3集成ElasticSearch

    目录 一.简介 二.环境搭建 1.下载安装包 2.服务启动 三.工程搭建 1.工程结构 2.依赖管理 3.配置文件 四.基础用法 1.实体类 2.初始化索引 3.仓储接口 4.查询语法 五.参考源码 ...