题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023

题意: 区间更新, 区间询问;

题解: 区间更新, 区间询问, 一共30种颜色, 可用int 来存。

地区选拔赛的一道题,当时还没怎么学线段树(只会单点更新), 这道题只能看着别人A, 自己干着急。  今天刚看了NOS神牛的第一道区间更新就迫不及待的尝试了下。

不得不说, 题目水, 人更水TT。

最后在感慨一下, NOS神牛的代码真tm好看。

 /***Good Luck***/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <map>
#include <queue>
#include <vector>
#include <set>
#include <functional>
#include <cmath>
#include <numeric> #define Zero(a) memset(a, 0, sizeof(a))
#define Neg(a) memset(a, -1, sizeof(a))
#define All(a) a.begin(), a.end()
#define PB push_back
#define inf 0x3f3f3f3f
#define inf2 0x7fffffffffffffff
#define ll long long
using namespace std;
//#pragma comment(linker, "/STACK:102400000,102400000")
void get_val(int &a) {
int value = , s = ;
char c;
while ((c = getchar()) == ' ' || c == '\n');
if (c == '-') s = -s; else value = c - ;
while ((c = getchar()) >= '' && c <= '')
value = value * + c - ;
a = s * value;
}
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1| 1
const int maxn = 1e6 + ;
int A[maxn << ];
int n, m;
int col[maxn << ];
void pu(int rt) {
A[rt] = A[rt << ] | A[rt << | ];
} void pd(int rt) {
if (col[rt]) {
col[rt << ] = col[rt << | ] = col[rt];
A[rt << ] = col[rt];
A[rt << | ] = col[rt];
col[rt] = ;
}
} void update(int L, int R, int v, int l, int r, int rt) {
if (L <= l && r <= R) {
A[rt] = << (v - );
col[rt] = << (v - );
return;
}
pd(rt);
int m = (l + r) >> ;
if (L <= m) update(L, R, v, lson);
if (R > m) update(L, R, v, rson);
pu(rt);
} int query(int L, int R, int l, int r, int rt) {
if (L <= l && r <= R) {
return A[rt];
}
pd(rt);
int m = (l + r) >> ;
int ret = ;
if (L <= m) ret |= query(L, R, lson);
if (R > m) ret |= query(L, R, rson);
return ret;
}
int main() {
//freopen("data.out", "w", stdout);
//freopen("data.in", "r", stdin);
//cin.sync_with_stdio(false);
while (scanf("%d%d", &n, &m), n|m) {
int t = n << ;
char q[];
int a, b, v, ans;
for (int i = ; i <= t; ++i) {
A[i] = ;
col[i] = ;
}
vector<int> vr;
for (int i = ; i <= m; ++i) {
scanf("%s", q);
if (q[] == 'P') {
scanf("%d%d%d", &a, &b, &v);
update(a, b,v, , n, );
} else {
scanf("%d%d", &a, &b);
ans = query(a, b, , n, );
for (int w = ; w <= ; ++w) {
if (ans & ) vr.push_back(w );
ans >>= ;
}
for (int w = ; w < vr.size(); ++w) printf("%d ", vr[w - ]);
printf("%d\n", *vr.rbegin());
vr.clear();
}
}
}
return ;
}

(线段树)A Corrupt Mayor's Performance Art的更多相关文章

  1. A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  2. hdu 5023 A Corrupt Mayor's Performance Art 线段树

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  3. hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)

    A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100 ...

  4. HDU5023:A Corrupt Mayor's Performance Art(线段树区域更新+二进制)

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 Problem Description Corrupt governors always find way ...

  5. ACM学习历程—HDU 5023 A Corrupt Mayor's Performance Art(广州赛区网赛)(线段树)

    Problem Description Corrupt governors always find ways to get dirty money. Paint something, then sel ...

  6. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  7. HDU 5023 A Corrupt Mayor's Performance Art (据说是线段树)

    题意:给定一个1-n的墙,然后有两种操作,一种是P l ,r, a 把l-r的墙都染成a这种颜色,另一种是 Q l, r 表示,输出 l-r 区间内的颜色. 析:应该是一个线段树+状态压缩,但是我用s ...

  8. hdu - 5023 - A Corrupt Mayor's Performance Art(线段树)

    题目原文废话太多太多太多,我就不copyandpaste到这里啦..发个链接吧题目 题目意思就是:P  l  r  c  将区间 [l ,r]上的颜色变成c    Q  l r 就是打印出区间[l,r ...

  9. A Corrupt Mayor's Performance Art

    Corrupt governors always find ways to get dirty money. Paint something, then sell the worthless pain ...

随机推荐

  1. 为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

    之前在阅读<阿里巴巴Java开发手册>时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符 ...

  2. Vue全局组件注册

    通过Vue.component(‘组件名’, {配置对象})注册全局组件 在main.js中注册全局组件 test import Vue from 'vue' import App from './A ...

  3. 图论-最小生成树<Kruskal>

    昨天: 图论-最小生成树<Dijkstra,Floyd> 以上是昨天的Blog,有需要者请先阅读完以上再阅读今天的Blog. 可能今天的有点乱,好好理理,认真看完相信你会懂得 然而,文中提 ...

  4. collectionView reloadData走了不执行cellForItemAtIndexPath

    有可能是sizeForItemAtIndexPath方法中的前几个cell没有设置大小, 这里必须设置, 哪怕是设置一个很小的值

  5. 七、springBoot 简单优雅是实现文件上传和下载

    前言 好久没有更新spring Boot 这个项目了.最近看了一下docker 的知识,后期打算将spring boot 和docker 结合起来.刚好最近有一个上传文件的工作呢,刚好就想起这个脚手架 ...

  6. SpringBoot中如何优雅的读取yml配置文件?

    YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基 ...

  7. Mutex vs Semaphore vs Monitor vs SemaphoreSlim

    C#开发者(面试者)都会遇到Mutex,Semaphore,Monitor,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 线程安全 教条式理解 如 ...

  8. jQuery选择器 大于 空格 波浪线 加号

    JQuery选择器 大于 空格 波浪线 加号的区别 元素遍历 符号 说明 空格 $(‘parent child’)表示获取parent下的所有的child节点(所有的子孙). 大于号 $(‘paren ...

  9. day07整理(内置方法\循环判断)

    目录 一.上节课回顾 (一)if判断 1.单分支结构 2.双分支结构 3.多分支结构 (二)for循环 1.for + break 2.for + continue 3.for循环嵌套 (三)robu ...

  10. jupyter notebook启动需要输入密码的问题

    问题描述: 安装完jupyter notebook之后,启动时需要输入密码,如下图所示: 解决方法: 1.启动jupyter notebook 2.在另一个的终端中输入 jupyter noteboo ...