首页 > 其他分享 >[ABC216G] 01Sequence 题解

[ABC216G] 01Sequence 题解

时间:2023-06-19 21:49:00浏览次数:57  
标签:int 题解 tree mid ABC216G include 01Sequence

01Sequence

题目大意

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

思路分析

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

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

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;
const int N=200100;

int n,m,in1,in2,in3;
int res[N];

struct BIT{
    int a[N];
    #define lowbit(x) ((x)&(-(x)))
    void add(int x,int v){
        for(int i=x;i<=n+1;i+=lowbit(i)) a[i]+=v;
    }
    int ask(int x){
        int ans=0;
        for(int i=x;i;i-=lowbit(i)) ans+=a[i];
        return ans;
    }
}tree;

struct Node{
    int l,r,x;
}a[N];

bool cmp(Node a,Node b){//按右端点从小到大排序
    if(a.r!=b.r) return a.r<b.r;
    return a.l<b.l;
}

int find(int i){//对于当前的区间二分出下一个应该放的位置
    int l=a[i].l,r=a[i].r;
    while(l<r){
        int mid=(l+r+1)>>1;
        if(tree.ask(r)-tree.ask(mid-1)==r-mid+1) r=mid-1;//右半部分放满了
        else l=mid;
    }
    return l;
}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&in1,&in2,&in3);
        a[i]=Node{in1,in2,in3};
    }
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++){
        int num=a[i].x-(tree.ask(a[i].r)-tree.ask(a[i].l-1)),pos;//找到还差多少
        while(num>0){tree.add((pos=find(i)),1);res[pos]=1;num--;}//逐一填充
    }
    for(int i=1;i<=n;i++) cout<<res[i]<<' ';
    return 0;
}

标签:int,题解,tree,mid,ABC216G,include,01Sequence
From: https://www.cnblogs.com/TKXZ133/p/17492258.html

相关文章

  • 题解:【AT Educational DP Contest-O】 Matching
    题目链接来点位运算优化,目前也是拿下了洛谷最优解,比第二名快一倍:#include<bits/stdc++.h>#defineintlonglong#definebtp(x)__builtin_popcount(x)#definelowbit(x)((x)&(-x))usingnamespacestd;namespaceFastIO{template<typenameT=int>inlineTread()......
  • SecureCRT连接慢的问题解决
    选定SSH2,选择Authentication,勾选Password,然后将该选项上移,挪到第一位即可 修改SecureCRT配置目录(C:\Users\manager\AppData\Roaming\VanDyke\Config\)的Sessions子目录下对应的服务器ini配置文件,GSSAPIMethod设置的值为none,重启SecureCRT,连接贼快   原贴:1、https:/......
  • Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)
    今天同事说有一个Tuxedo应用在做测试,但重启了机器和Tuxedo环境后,服务仍无法启动,这次的问题排查和处理比较典型,值得梳理一次。应用环境:OS:SunOS5.9Tuxedo:9.1,MP双机环境问题现象:由于服务不可用,之前有同事使用kill干掉了一些Tuxedo进程,但无法确定具体范围。重启了服务器和Tuxedo......
  • MySQL数据字典提示1146不存在的问题解决
    最近某套MySQL因为磁盘挂载问题,异常宕机,拉起后,数据库能正常访问了,但是在error.log一直提示这个错误,[ERROR]InnoDB:Table`mysql`.`innodb_table_stats`notfound.2021-09-03T08:26:52.446564Z2[ERROR]InnoDB:Fetchofpersistentstatisticsrequestedfortable`jira`.`c......
  • maltego的 卡 慢 没反应 的问题解决方法
    maltego的卡慢没反应的问题主要是因为它要在国外下载和认证一些东西,导致软件无法正常访问。解决方法:配置带理,软件内部就支持,打开选择设置,    选择手动指定,填入服务器ip和端口,我使用链接本地服务器带理,服务器要允许局域网连接,并且关闭服务器上的防火墙,如果......
  • AtCoder Beginner Contest 306 题解 A - E
    A-Echo题目大意给定一个字符串,需要把它每个字符重复输出。解题思路可以读完整个字符串,也可以按照字符读一个输出两个。ACCode#include<iostream>#include<algorithm>#include<cstring>#include<numeric>#defineendl'\n'#defineiosios::sync_with_stdio(fals......
  • 小程序授权常见问题解析及解决方案
    引言小程序作为一种轻便、易用的应用形式,正在成为许多企业和个人开发者的首选。在用户使用小程序时,需要授权相应的权限才能获取更好的使用体验。但是,有时会遇到授权失败或出现安全隐患等问题。本文将从常见问题的角度出发,为大家解析小程序授权常见问题及其解决方案。下午一直犯困吟......
  • 题解:【ABC168F】 . (Single Dot)
    题目链接挺套路的题。如果值域和线段数量同阶,可以预处理不能越过的线段,使用状压四个方向记录每个节点能不能往这个方向走,然后直接爆搜就好了,标记上能走到哪些地方。但这个值域一看就是没有救的,于是就要拿出来离散化了。把线段的横纵坐标都拎出来离散化,依然是同样的预处理,然后从离......
  • 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)个人题解
    RC-u4变牛的最快方法思路最短编辑距离+记录路径板子题,不懂最短编辑距离的可以看看网上的博客。不懂为什么官方题解用的bfs写法,然后网上所有的题解就是bfs了。我这里就是双重for循环实现,参考下写法即可。代码点击查看代码#include<bits/stdc++.h>#definexfirst#definey......
  • CF1840C题解
    题目描述题目传送门\(T\)组数据,每组数据给定\(n\),\(k\),\(q\)和一个长度为\(n\)的数组\(a\),求\(a\)中长度大于等于\(k\)且最大值小于等于\(q\)的序列个数。\(\sum{n}\le2e5\)。题目解析解法一:数据结构解法显然可以利用数据结构维护。考虑ST表预处理出区间最大......