title: hdu-5023线段树刷题

date: 2018-10-18 13:32:13

tags:

  • acm
  • 刷题

    categories:
  • ACM-线段树

概述

这道题和上次做的那道染色问题一样,,,这次主要是看看我再过去两三天之后,,大概凭借以前的记忆敲出来得多长的时间,,,,

结果是,,,大体的框架没问题了,,,,一遍下来编译也没问题,,,但是,,细节问题有两个,,,

  • 数组写成了1e6而不是1e6+10虽然对本题没什么影响,,
  • 建树中的初始化操作时染色初始化为2,,,所以应该是从右往左数的第二个bit记为1,,,然后我就少算了一位,,,因为bitset可以看作是一个从右向左并且从0开始的数组,,所以是col[1] = 1,,,这样wa了一发
  • 最后一个,,,,输出格式错误,,,,噗噗噗噗

代码

思路与poj那一道一模一样,,直接扔代码

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <bitset> using namespace std; const int maxn = 1e6 + 10; struct node
{
int l;
int r;
int laz;
bitset<30> col;
}node[maxn << 2];
#define aaa cout << node[rt].col << endl;
void build(int rt , int l , int r)
{
node[rt].l = l;
node[rt].r = r;
node[rt].laz = 0;
node[rt].col = 0;
if(node[rt].l == node[rt].r)
{
bitset<30> t;
t.set(1);
node[rt].col = t;
return;
}
int mid = (node[rt].l + node[rt].r) >> 1; build(rt << 1 , l , mid);
build(rt << 1 | 1 , mid + 1 , r);
node[rt].col = node[rt << 1].col | node[rt << 1 | 1].col;
return;
}
void pushdown(int rt)
{
if(node[rt].laz)
{
node[rt << 1].col = node[rt].col;
node[rt << 1 | 1].col = node[rt].col; node[rt << 1].laz = node[rt].laz;
node[rt << 1 | 1].laz = node[rt].laz; node[rt].laz = 0;
}
}
void update(int rt , int L , int R , int C)
{
if(L <= node[rt].l && node[rt].r <= R)
{
bitset<30> t;
t.set(C - 1);
node[rt].col = t;
node[rt].laz = C;
return;
}
pushdown(rt); int mid = (node[rt].l + node[rt].r) >> 1; if(L <= mid) update(rt << 1 , L , R , C);
if(R > mid) update(rt << 1 | 1 , L , R , C);
node[rt].col = node[rt << 1].col | node[rt << 1 | 1].col;
return;
}
bitset<30> query(int rt , int L , int R)
{
if(L <= node[rt].l && node[rt].r <= R)
{
return node[rt].col;
} pushdown(rt);
bitset<30> ans(0);
int mid = (node[rt].l + node[rt].r) >> 1;
if(L <= mid) ans |= query(rt << 1 , L , R);
if(R > mid) ans |= query(rt << 1 | 1 , L , R);
return ans;
} int main()
{
int n , m;
while(scanf("%d%d" , &n , &m) && n && m)
{
build(1 , 1 , n);
while(m--)
{
char c;
scanf(" %c" , &c);
if(c == 'P')
{
int l , r , v;
scanf("%d%d%d" , &l , &r , &v);
update(1 , l , r , v);
}
else
{
int l , r;
scanf("%d%d" , &l , &r);
bitset<30> ans = query(1 , l , r);
bool flag = true;
for(int i = 1; i <= 30; ++i , ans>>=1)
if(ans[0] == 1)
if(flag)
printf("%d" , i) , flag = false;
else
printf(" %d" , i);
printf("\n");
}
}
}
}

先水一题,,,下午继续QAQ

(end)

hdu-5023线段树刷题的更多相关文章

  1. hdu-1540线段树刷题

    title: hdu-1540线段树刷题 date: 2018-10-18 19:55:21 tags: acm 刷题 categories: ACM-线段树 概述 哇,,,这道线段树的题可以说是到目 ...

  2. poj-2777线段树刷题

    title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...

  3. zoj-1610线段树刷题

    title: zoj-1610线段树刷题 date: 2018-10-16 16:49:47 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道简单的线段树区间染色问 ...

  4. hdu 5023 线段树+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...

  5. HDU 5023线段树区间染色,统计区间内颜色个数

    这个也是一个线段树的模板 #include<iostream> #include<string.h> #include<algorithm> #include< ...

  6. hdu 5023 线段树+位运算

    主要考线段树的区间修改和区间查询,这里有一个问题就是这么把一个区间的多种颜色上传给父亲甚至祖先节点,在这里题目告诉我们最多30颜色,那么我们可以把这30中颜色用二进制储存和传给祖先节点,二进制的每一位 ...

  7. hdu 5023 线段树延迟更新+状态压缩

    /* 线段树延迟更新+状态压缩 */ #include<stdio.h> #define N 1100000 struct node { int x,y,yanchi,sum; }a[N* ...

  8. HDU 4893 线段树裸题

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  9. hdu 5023 线段树

    成端更新+统计区间内的值 挺模板的题... 一开始没想起来用set统计,傻傻地去排序了[大雾 #include<iostream> #include<cstdio> #incl ...

随机推荐

  1. just test css

    沃尔沃而 public void Commit() { if (_disposed) throw new InvalidOperationException(); if (_transaction = ...

  2. 简单的多对一传输ns2仿真

    实验名称:简单的多对一传输仿真 实验目的:1.研究怎么实现多对一传输. 实验步骤: 1.写c++代码并注册报文头. 先说一下多对一传输的方式.最开始,接收端发送控制报文给所有的发送端,告诉他们要发送多 ...

  3. 【leetcode 简单】 第一百一十二题 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...

  4. shell操作典型案例--FTP操作

    从FTP服务器上下载文件或上传文件到FTP服务器是生产环境中比较常见的场景之一. shell操作FTP的方式整理如下: 思路一:使用shell调用ftp等客户端 使用FTP方式,通过shell调用ft ...

  5. mysql定时删除数据

    删除三天前的数据的sql DELETE FROM table WHERE created_on < DATE_SUB(CURDATE(),INTERVAL 3 DAY); CURDATE() 返 ...

  6. Python练习-三级菜单与"片儿"无关!

    # 编辑者:闫龙 #三级目录 menu = { '北京':{ '海淀':{ '五道口':{'soho':{},'网易':{},'google':{}}, '中关村':{'爱奇艺':{},'汽车之家': ...

  7. js数据类型隐式转换问题

    js数据类型隐式转换 ![] == false //true 空数组和基本类型转换,会先[].toString() 再继续比较 ![] == [] //true ![] //false [] == [ ...

  8. dstat 服务器性能查看命令【转】

    一. 安装和简解 # yum -y install dstat# dstat CPU状态:CPU的使用率.这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况.如果你看 ...

  9. java基础69 JavaScript产生伪验证码(网页知识)

    1.伪验证码 <!doctype html> //软件版本:DW2018版 <html> <head> <meta charset="utf-8&q ...

  10. 题解 UVA10048 【Audiophobia】

    这是一道很神奇的题 什么都不卡,就卡c++11(所以评测时要换成c++). 怎么说呐,其实就是跑一个弗洛依德,求图上两点间最大权值最小的路径,输出最大权值最小. P.S.本题n很小,直接floyd变形 ...