2018湘潭大学程序设计竞赛【H】
题目链接:https://www.nowcoder.com/acm/contest/105/H
题意:两个操作,一个在[l,r]区间放颜色为c的球,一个统计在[l,r]里有多少不同颜色的球。
题解:哎,线段树嘛。板子嘛、把求和操作改一改嘛。当时没用lazy操作T了嘛。谢谢大佬的板子。小萌新知道lazy是个啥玩意儿了。emmm..最后统计一下1的个数就是答案啦。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
struct data{
int l,r;
ll add;
ll sum;
}data[]; void build(int l,int r,int k){
data[k].l=l;
data[k].r=r;
data[k].add=;
data[k].sum=;
if(l==r){
return ;
}
int mid=(data[k].l+data[k].r) >> ;
build(l,mid,k*);
build(mid+,r,k*+);
} void pushdown(int k){
if(data[k].add==) return ;
data[k*].sum |= data[k].add;
data[k*+].sum |= data[k].add;
data[k*].add |= data[k].add;
data[k*+].add |=data[k].add;
data[k].add=;
} void update(int l,int r,int x,int k){
if(data[k].l==l&&data[k].r==r){
data[k].sum|=(ll)(1LL<<x);
data[k].add|=(ll)(1LL<<x);
return ;
}
pushdown(k);
int mid=(data[k].l + data[k].r)/;
if(r <= mid){
update(l,r,x,k*);
}else if(l > mid){
update(l,r,x,k*+);
}else{
update(l,mid,x,k*);
update(mid+,r,x,k*+);
}
data[k].sum=data[k*].sum | data[k*+].sum;
} ll query(int l,int r,int k){
if(data[k].l==l&&data[k].r==r){
return data[k].sum;
}
pushdown(k);
int mid=(data[k].l + data[k].r) / ;
if(r <= mid){
return query(l,r,k*);
}else if(l > mid){
return query(l,r,k*+);
}else{
return query(l,mid,k*) | query(mid+,r,k*+);
}
} int main(){
int n,m;
scanf("%d %d",&n,&m);
build(,n,);
while(m--){
int flag;
scanf("%d",&flag);
if(flag==){
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
update(x,y,k,);
}else{
int x,y;
scanf("%d%d",&x,&y);
int ans = query(x,y,);
int cnt = ;
while(ans){
if(ans&)
cnt++;
ans = ans >> ;
}
cout<<cnt<<endl;
}
}
return ;
}
2018湘潭大学程序设计竞赛【H】的更多相关文章
- 2018年湘潭大学程序设计竞赛 H统计颜色
链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018湘潭大学程序设计竞赛【B】
题目链接: https://www.nowcoder.com/acm/contest/105/B 题意: 给你一个字母矩阵,和测试组数,让你统计字符串的字符累计出现的次数,然后让你找出需要找的字符,这 ...
- 2018湘潭大学程序设计竞赛【E】
题目链接:https://www.nowcoder.com/acm/contest/105/E 题意:给你美食种类和查询次数,告诉你美味度和价格,给你固定钱数,问你最多能吃到多少美味度的食物.(X真是 ...
- 2018湘潭大学程序设计竞赛【A】
题目链接:https://www.nowcoder.com/acm/contest/105/A 题意:给你起始和结束的天时分,让你算总秒数. 题解:输入格式.注意long long.签到题. #inc ...
- 2018湘潭大学程序设计竞赛【D】
题目链接:https://www.nowcoder.com/acm/contest/105/D 题意:就是数的fib表示方法.按权展开,又按二进制算出结果输出. 题解:贪心和数论吧.找到跟数最接近的f ...
- 2018湘潭大学程序设计竞赛【C】
题目链接:https://www.nowcoder.com/acm/contest/105/C 题意:给你几个矩形的左上角和右下角的坐标,让你算有几个矩形相交. 题解: 每次都暴力标记一下炸弹区域里的 ...
- 2018年湘潭大学程序设计竞赛G又见斐波那契
链接:https://www.nowcoder.com/acm/contest/105/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2018年湘潭大学程序设计竞赛 F - maze
把点抽出来 跑个最短路就好啦. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> # ...
- 2018年湘潭大学程序设计竞赛 G- 又见斐波那契
推一推矩阵直接快速幂. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #defi ...
随机推荐
- matlab中的 ndims(a)、length(a)、size(a) 分别是什么意思?
size(a)表示矩阵每个维度的长度比如size([1 2 3;4 5 6])等于[2 3]表示他有2行3列size([1 2 3])等于[1 3]表示他有1行3列另外size(a,n)表示矩阵a在第 ...
- 18、webservice使用
1.将axis2.war文件拷到tomcat,webapp文件夹下,然后重启tomcat 访问
- python中的缓存技术
python缓存技术 def console(a,b): print('进入函数') return (a,b) print(console(3,'a')) print(console(2,'b')) ...
- QinQ 技术解析
目录 1. 概述 2. QinQ 的产生背景 3. QinQ的作用及原理 4. QinQ 技术的优点 5. QinQ 的报文结构 6. QinQ的实现方式 (1) 基本QinQ (2) 灵活QinQ ...
- python 出现indentationError:expected an indented block!
出现这个问题,代码一般是没问题的,剩下你要考虑: 1. 缩进对齐是否有问题 2. python脚本的格式是啥,如果你在linux上运行,编码需要是unix; (大部分情况下,我们是在windows下 ...
- 剑指offer——68队列的最大值
题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6 ...
- 关于版本管理工具SVN
曾经使用过Git,但是目前使用的是相对简单的svn. 刚使用的时候,如果不出意外.会有同学配好环境与权限. 前端只需要将代码下载,修改,更新,与上传. 一 .下载 1.本地新建文件夹,作为本地仓库 命 ...
- SpringMVC和spring常见面试题总结
1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,C ...
- UNLISTEN - 停止监听通知信息
SYNOPSIS UNLISTEN { name | * } DESCRIPTION 描述 UNLISTEN 用于删除一个现有的已注册的 NOTIFY 事件. UNLISTEN 取消当前 Postgr ...
- 2019_7_31python
练习 输入三条边长如果能构成三角形就计算周长和面积 import math a,b,c = input().split(',') a = float(a) b = float(b) c = floa ...