cdoj1259 线段树+bitset

【CDOJ 1259】 昊昊爱运动Ⅱ 【bitset状压+线段树】 http://acm.uestc.edu.cn/#/problem/show/1259#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<bitset> using namespace std;#define maxn 100010 int n,m,q; 阅读详情

感觉题目简单,就看你的bitset怎么用了。

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <stdio.h>
#include <bitset>
#define maxn 160005
using namespace std;
struct ee
{
    int l,r,lazy;
    bitset<120> s;
}tree[maxn*4];
int n,m;

void build_tree(int root,int l,int r)
{
    tree[root].l=l;
    tree[root].r=r;
    tree[root].lazy=0;
    tree[root].s.reset();
    if(l==r)
        return;
    int mid=(l+r)/2;
    build_tree(2*root,l,mid);
    build_tree(2*root+1,mid+1,r);
}

void pushdown(int a)
{

    tree[a].s.reset();
    tree[a].s|=tree[a*2].s;
    tree[a].s|=tree[a*2+1].s;
}

void pushup(int a,int l)
{
    tree[a*2].lazy=l;
    tree[a*2].s.reset();
    tree[a*2].s[l]=1;
    tree[a*2+1].lazy=l;
    tree[a*2+1].s.reset();
    tree[a*2+1].s[l]=1;
}

bitset<120> query(int root,int l,int r)
{
    if(tree[root].lazy!=0)
    {
        pushup(root,tree[root].lazy);
        tree[root].lazy=0;
    }
    if(l<=tree[root].l&&tree[root].r<=r)
        return tree[root].s;
    bitset<120> bit;
    bit.reset();
    int mid;
    mid=(tree[root].l+tree[root].r)/2;
    if(l<=mid)
    bit|=query(root*2,l,r);
    if(mid<r)
    bit|=query(root*2+1,l,r);
    return bit;
}

void update(int root,int l,int r,int v)
{
    if(l<=tree[root].l&&tree[root].r<=r)
    {
        tree[root].lazy=v;
        tree[root].s.reset();
        tree[root].s[v]=1;
        return;
    }
    if(tree[root].lazy!=0)
    {
        pushup(root,tree[root].lazy);
        tree[root].lazy=0;
    }
    int mid=(tree[root].l+tree[root].r)/2;
    if(l<=mid)
    {
        update(root*2,l,r,v);
    }
    if(mid<r)
    {
        update(root*2+1,l,r,v);
    }
    pushdown(root);
    //printf("tree[%d]=%d l=%d,r=%d\n",root,tree[root].s.count(),tree[root].l,tree[root].r);
}

int main()
{
    //freopen("d:\\in.txt","r",stdin);
    scanf("%d%d",&n,&m);
    int i;
    build_tree(1,1,n);
    for(i=1;i<=n;i++)
    {
        int x;
        scanf("%d",&x);
        update(1,i,i,x);
    }
    int Q;
    scanf("%d",&Q);
    for(i=1;i<=Q;i++)
    {
        char ch[2];
        scanf("%s",ch);
        int a,b;
        scanf("%d%d",&a,&b);
        if(ch[0]=='M')
        {
            int c;
            scanf("%d",&c);
            update(1,a,b,c);
        }
        else
        {
           printf("%d\n",query(1,a,b).count());
        }
    }
    return 0;
}

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

竞赛无人机模块化开发实战:2023 TI电赛G题空地协同消防系统(飞控与视觉融合篇)

本文以2023年TI电赛G题为例,详细阐述了采用模块化开发思维构建空地协同智能消防系统的实战方法。文章重点拆解了无人机飞控二次开发、视觉识别与融合控制等核心模块,提供了硬件选型、代码实现与系统联调的完整指南,旨在帮助参赛者通过“搭积木”式编程高效完成复杂系统集成。

js777的博客 454

51nod 1981 (线段树+ bitset)

1981 如何愉快地与STL玩耍  基准时间限制:3.5 秒 空间限制:524288 KB 分值: 80 难度:5级算法题  收藏  关注 驴蛋蛋在愉快地与STL玩耍 突然间小A跳了出来对驴蛋蛋说,看你与STL玩的很开心啊,那我给你一个大小为N的vector,这个vector上每个位置上是一个set&lt;int&gt;, 每次我会在闭区间 [L,R] 中的每个set&lt;int&g...

yjt9299的博客 366

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 867

bitset+DFS序+线段树 Codeforces633G Yash And Trees

传送门:点击打开链接 题意:给你一棵树,根节点为1 有2种操作,第一种是给u节点所在的子树的所有节点的权值+x 第二种是询问,假设v是子树u中的节点,有多少种质数满足av = p + m·k 其中p 思路:首先用DFS序,把树弄成线段树来表示,这种做法十分常见就不多讲了 因为m 每次对子树增加权值的时候,只需要修改懒惰标记,来记录增加的大小 然后直接把bitset利用位运算来完

qwb的博客 1211

UE4 专用服务器搭建(UE4.27为例)

专用服务器、DS服务器

mimo134的博客 2775

APM32F103 配置CAN

摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。

weixin_43676660的博客 862

数学家的迷题(bitset+线段树)

题意:给一个序列,共有两个操作。 1.可以修改某个位置的值为x。 2.给一个区间l,r,T=a[l]×a[l+1]×...×a[r−1]×a[r],问T有多少个质因子。 思路:多个数相乘的答案的质因子个数为每个数字的质因子存入集合去重后的个数。因为需要对每个数的质因子进行去重和存储,可以用bitset存储质因子,然后做与运算即可,但是由于空间限制,我们应先将小于1e5的质因子求出来,然后直接处理,由于求出来后直接for循环分解也会超时,需要优化成直接找到最小质因子的方式,然后建立线段树进行单点修改和区

m0_46335115的博客 270

PHY6252开发实战:从零构建BLE串口透传应用

本文详细介绍了PHY6252开发板在BLE串口透传应用中的实战经验,包括开发环境搭建、BLE串口透传例程解析、AT指令集实现与扩展、数据透传机制优化以及常见问题排查指南。通过智能家居遥控器项目案例,展示了PHY6252在低功耗物联网设备开发中的实际应用。

weixin_29183637的博客 312

codeforces981e(线段树+bitset)

E. Addition on Segmentstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputGrisha come to a contest and faced the following problem.You are given an a...

yypurpose的博客 410

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2619

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

[线段树维护BITSET] NOI2017 .Day1 T1 整数

把数转换成二进制维护 那么进位就是把之后一段连续1变成0,后面的0变成1 退位就是把之后一段连续的0变成1,后面的1变成0 这样可以用线段树维护 有一个nlog2nn\log^2n的暴力,就是把这个数的每一个为1的位取出来,用线段树加进去,a为负的同理如果把原来的01序列压位一下(我压了30位),那么a最多跨2个30位整数,把这两位取出来,拼成一个60位整数,然后把加上去,因为最多进(退)一

CE玩家 1926

PCL 点云按强度渲染颜色【2025最新版】

点云按反射强度渲染颜色,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 2万+

cdoj 1259 线段树+bitset

链接:戳这里 昊昊喜欢运动 他NN天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x,x∈[1,m]) 问昊昊第l天到第r天参加了多少种不同的运动 Input 输入两个数N, M (1≤N≤105, 1≤M≤100); 输入N个数ai(ai∈[1,m]表示在第i天昊昊做了第ai类型的

Cross 490

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

CDOJ 1259 昊昊爱运动 II 线段树+bitset

昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了多少种不同的运动 Input 输入两个数N,M(1≤N≤105,1≤M≤100); 输入N个数ai(ai∈[1,m])表示在第i天昊昊做了...

weixin_30482383的博客 183

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CDOJ1259 昊昊爱运动 II (线段树+bitset)

题目链接 使用bitset保存每一段区间的不同的数的数量,线段树节点,存bitset,bitset可以使用二进制位运算 #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<iostream> #include<bitset> using namespace

qwesde 602

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

CDOJ 1259 昊昊爱运动 II bitset+线段树

题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了多少种不同的运动 Input 输入两个数N,M(1≤N≤105,1≤M≤100); 输入N个数ai(ai∈[1,m])表示在第i天昊昊做了第ai类型的运动; ...

weixin_30739595的博客 167

cdoj 1259 昊昊爱运动 II 线段树+bitset

昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN天内会参加MM种运动(每种运动用一个[1,m][1,m]的整数表示) 现在有QQ个操作,操作描述如下 昊昊把第ll天到第rr天的运动全部换成了xx(x∈[1...

weixin_30767835的博客 143

2016 UESTC Training for Data Structures Q - 昊昊爱运动 II CDOJ 1259 线段树+bitset

Q - 昊昊爱运动 II 题意,区间长度N,N为1e5,运动种数为M,M Q次操作,Q,每次可以把一个区间的运动都换成x,或者查询一个区间的运动种数   在放宽了时限和内存之后,bitset就直接搞过去了   之前因为卡的太紧,我就用两个long long模拟的bitset,另外线段树也没有存左右端点,是在更新和查询的过程中用形参来保存的   具体做法就是每个节点存一个bits

一蓑烟雨任平生 732

java 排列组合生成器_java实现排列组合输出

展开全部完成了一种实现,发给你参考下。不过感觉应该还有更好的办法,有时间我会继续研究下.importjava.util.ArrayList;importjava.util.Arrays;importjava.util.HashSet;importjava.util.List;importjava.util.Set;publicclassTestQiuhe{//集合a{1,2,3,5...

weixin_34416115的博客 1341

【cdoj 1259】昊昊爱运动 bitset

【cdoj 1259】昊昊爱运动 bitset

pbihao的博客 409

单调栈、单调队列、线段树、LCA、二维树状数组、Bitset讲解

一、单调栈 1.问题引入 考虑这样一个问题,给出一个数字序列,一段连续的子序列的权值定义为这个子序列中最小的权值乘以子序列的长度,求最大的子序列权值,数据范围O(n)可过。 2.问题转化 稍加思索我们可以得到一个O(n^2)的算法,但是显然是太慢,我们想办法换一种枚举方式,假如我们枚举每一个数作为最小值,计算这个序列最大能扩张多长,那么这样就优化成了O(n)个数进行比较,于是只要能快速算出

LZJ209的博客 1799

codeforces 981 E. Addition on Segments(线段树+bitset)

题目链接:http://codeforces.com/contest/981/problem/E思路:因为是查询的子集,所以其实只要看这些子集能凑出那些数字就好了,每次查询是l,r,x相当于l-r每个点加x,所以很容易可以想到用1-n之间每一个点bitset一次看有多少种数字,可如果真这么干了,肯定要T掉,所以可以配合线段树加速一下。然后我用了bitset,#define rc (d&lt;&lt...

llmxby 462

bitset

C++ bitset 高端压位卡常题必备STL(好吊的一句话) bitset存储二进制数位。 bitset就像一个bool类型的数组一样,但是有空间优化—bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一。 bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,表达式foo[3]访问了它的第4个元素,就像数组一样。 bitset有一...

XFire的博客 1062

模板:bitset高精度

bitset高精度 代替整型进行位运算,更方便并且可以处理超过最大整形范围大小的位集合。 你可以把bitset看作可以位运算的bool数组,换言之,bitset的大小是固定的。因此,用bitset做状态压缩是很方便的,也可以方便的实现集合的交并补操作。 bitset仅重载了相等不等和位运算符,原生不支持四则运算和大小比较,所以很少代替高精度数。 bitset&amp;amp;amp;amp;amp;lt;N&amp;amp;amp;amp;amp;gt; b(unsi..

wu-kan 1820

CF633G Yash And Trees(线段树+bitset)

首先我们用dfs序把子树转化成区间,我们就是要维护区间加法和区间%m不同质数的个数。 因为m只有1000,我们直接暴力的每个节点维护一个大小为1000的bitset即可。 bitset的一位只占1bit,因此内存为1000/8字节。所以空间复杂度就是O(4n∗1000/8)O(4n*1000/8) 而bitset的各种操作都是O(1000/32)的,因此我们总的复杂度就是O(q(logn100

Icefox的博客 341
上一篇: hdu 4614 线段树+二分
下一篇: hdu 5438 +hdu 4786 并查集
labrother
博客等级 码龄11年 2粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值