牛客网-湘潭大学校赛重现H题 (线段树 染色问题)
链接:https://www.nowcoder.com/acm/contest/105/H
来源:牛客网
1 l r c 区间[l,r]中的每个桶中都放入一个颜色为c的球 (1≤l,r ≤n,l≤r,0≤c≤60)
2 l r 查询区间[l,r]的桶中有多少种不同颜色的球 (1≤l,r ≤n,l≤r)
输入描述:
有多组数据,对于每组数据:
第一行有两个整数n,m(1≤n,m≤100000)
接下来m行,代表m个操作,格式如题目所示。
输出描述:
对于每个2号操作,输出一个整数,表示查询的结果。
输入例子:
10 10
1 1 2 0
1 3 4 1
2 1 4
1 5 6 2
2 1 6
1 7 8 1
2 3 8
1 8 10 3
2 1 10
2 3 8
输出例子:
2
3
2
4
3
-->
输入
10 10
1 1 2 0
1 3 4 1
2 1 4
1 5 6 2
2 1 6
1 7 8 1
2 3 8
1 8 10 3
2 1 10
2 3 8
输出
2
3
2
4
3 思路:
看到颜色<=60,摆明了用二进制。。写法跟poj2777差不多,只不过poj2777是覆盖颜色,这个是增加颜色。。
忘了 << 运算不支持long long范围。。找了半天错。。。直接用快速幂代替就好了
如果之前写过这种类型的题的话写起来就很简单了. 实现代码;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
#define ll long long
const ll M = 1e5+;
ll powl(ll n,ll m)
{
ll ans = ;
while(m > )
{
if(m & )ans = (ans * n);
m = m >> ;
n = (n * n);
}
return ans;
} ll n,w,e;
ll color[M*],lazy[M*];
void pushup(ll rt){
color[rt] = color[rt*]|color[rt*+];
} void build(ll l,ll r,ll rt){
if(l==r){
color[rt] = ;
return ;
}
ll m = (l+r)/;
build(l,m,rt*);
build(m+,r,rt*+);
pushup(rt);
} void pushdown(ll rt){
if(lazy[rt]){
lazy[rt*] |= lazy[rt];
lazy[rt*+] |= lazy[rt];
color[rt*] |= lazy[rt*];
color[rt*+] |= lazy[rt*+];
lazy[rt] = ;
}
} void update(ll L,ll R,ll l,ll r,ll x,ll rt){
if(L<=l&&r<=R){
lazy[rt] |= powl(,x-);
color[rt] |= powl(,x-);
return ;
}
pushdown(rt);
ll m = (l+r)/;
if(L<=m) update(L,R,l,m,x,rt*);
if(R>m) update(L,R,m+,r,x,rt*+);
pushup(rt);
} ll query(ll L,ll R,ll l,ll r,ll rt){
if(L<=l&&r<=R){
return color[rt];
}
ll ans1=,ans2=,ans;
ll m = (l+r)/;
pushdown(rt);
if(L<=m) ans1+=query(L,R,l,m,rt*);
if(R>m) ans2+=query(L,R,m+,r,rt*+);
ans = ans1|ans2;
return ans;
} void getsum(ll x){
ll ans = ;
while(x){
if(x%==) ans++;
x/=;
}
printf("%lld\n",ans);
} int main()
{
ll L,R,x;
int c;
while(scanf("%lld%lld",&n,&w)!=EOF){
memset(lazy,,sizeof(lazy));
build(,n,);
while(w--){
scanf("%lld",&c);
if(c==){
scanf("%lld%lld%lld",&L,&R,&x);
if(L>R) swap(L,R);
x++;
update(L,R,,n,x,);
}
else{
scanf("%lld%lld",&L,&R);
if(L>R) swap(L,R);
ll cnt = query(L,R,,n,);
//cout<<cnt<<endl;
getsum(cnt);
}
}
}
return ;
}
牛客网-湘潭大学校赛重现H题 (线段树 染色问题)的更多相关文章
- 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校赛第九场A-circulant matrix【数论】
链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校赛第七场J--Sudoku Subrectangle
链接:https://www.nowcoder.com/acm/contest/145/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...
- 牛客网多校赛第七场--C Bit Compression【位运算】【暴力】
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校赛第七场A--Minimum Cost Perfect Matching【位运算】【规律】
链接:https://www.nowcoder.com/acm/contest/145/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 湘潭大学校赛H-统计颜色 线段树
链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 n个桶按顺序排列,我们用1~n给桶标号.有两种操作: 1 l r c 区间[l,r]中的每个桶中 ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- 牛客网数据库SQL实战解析(51-61题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
随机推荐
- [Noi2014]购票 BZOJ3672 点分治+斜率优化+CDQ分治
Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的 ...
- Scala _ 下划线
1.引入包中的全部方法 import math._ //引入包中所有方法,与java中的*类似 2.表示集合元素 val a = (1 to 10).filter(_%2==0).map(_*2) / ...
- php web开发安全之sql注入和防范:(一)简单的select语句注入和防范
sql注入主要是指通过在get.post请求参数中构造sql语句,以修改程序运行时所执行的sql语句,从而实现获取.修改信息甚至是删除数据的目的,sql被注入的原因主要是代码编写的有问题(有漏洞),只 ...
- 20155227《网络对抗》Exp7 网络欺诈防范
20155227<网络对抗>Exp7 网络欺诈防范 实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建 ...
- Jmeter 安装后无法启动问题
问题:按照教程java环境安装完成,也下载了 Jmeter 安装包,但是在启动的时候 dos窗口就一直提示下面的错误信息 ‘findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件. ...
- python装饰器 练习
用类作为装饰器 练习一 最初代码 class bol(object): def __init__(self, func): self.func = func def __call__(self): r ...
- 未能使用“Csc”任务的输入参数初始化该任务
今天.NetCore2.1版本,建立Asp.net Core web应用程序项目时,报以下错误: 未能使用“Csc”任务的输入参数初始化该任务. “Csc”任务不支持“SharedCompilatio ...
- stl源码剖析 详细学习笔记 算法(3)
//---------------------------15/03/30---------------------------- //min_element template<class Fo ...
- docker之compose 编排项目
一.docker-compose 的介绍 docker-compose是一种容器编排工具,可以将多个docker容器关联部署.通过yaml文件,可以描述应用的架构,如使用什么镜像.数据卷.网络.绑定服 ...
- OpenStack与OpenDaylight的对接过程
由于项目中需要使用OpenDaylight(Oxygen)替换OpenStack(Otaca)中的neutron-openvswitch-agent,能找到的一些资料都是比较旧的版本,官网上的文档也一 ...