网站设计与运营,在哪里可以买到客户数据,传销网站建设,互联网软件开发是什么有一个长度为L厘米板#xff0c;L是一个正整数#xff0c;所以我们可以把它均匀地划分成L个部分#xff0c;分别从左到右编号为1#xff0c;2……L#xff0c;每一个部分长度都为1厘米。现在我们必须给每个部分涂色#xff0c;一个部分一种颜色#xff0c;要求完成以下两…有一个长度为L厘米板L是一个正整数所以我们可以把它均匀地划分成L个部分分别从左到右编号为12……L每一个部分长度都为1厘米。现在我们必须给每个部分涂色一个部分一种颜色要求完成以下两种操作 1.“C A B C1”表示从A部分到B部分涂上C1颜色。 2.“P A B”表示从A部分到B部分涂了几种颜色。 在我们的日常生活中我们有非常少几种颜色红色绿色蓝色黄色...所以你可以假设不同颜色的总数T是非常少。简单地说我们表示颜色的名称为颜色1颜色2…..颜色T。最初时候这个厘米版都涂成颜色1。 思路
由于颜色很少所以说可以给他状态压缩成一个数。
也就是支持一下几个操作 1.区间或上1k
2.查询区间的或值
然后用线段树做就可以了。
懒标记更新有一点不一样。 // C includes used for precompiling -*- C -*-// Copyright (C) 2003-2021 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// http://www.gnu.org/licenses/./** file stdc.h* This is an implementation file for a precompiled header.*/// 17.4.1.2 Headers// C
#ifndef _GLIBCXX_NO_ASSERT
#include cassert
#endif
#include cctype
#include cerrno
#include cfloat
#include ciso646
#include climits
#include clocale
#include cmath
#include csetjmp
#include csignal
#include cstdarg
#include cstddef
#include cstdio
#include cstdlib
#include cstring
#include ctime
#include cwchar
#include cwctype#if __cplusplus 201103L
#include ccomplex
#include cfenv
#include cinttypes
#include cstdalign
#include cstdbool
#include cstdint
#include ctgmath
#include cuchar
#endif// C
#include algorithm
#include bitset
#include complex
#include deque
#include exception
#include fstream
#include functional
#include iomanip
#include ios
#include iosfwd
#include iostream
#include istream
#include iterator
#include limits
#include list
#include locale
#include map
#include memory
#include new
#include numeric
#include ostream
#include queue
#include set
#include sstream
#include stack
#include stdexcept
#include streambuf
#include string
#include typeinfo
#include utility
#include valarray
#include vector#if __cplusplus 201103L
#include array
#include atomic
#include chrono
#include codecvt
#include condition_variable
#include forward_list
#include future
#include initializer_list
#include mutex
#include random
#include ratio
#include regex
#include scoped_allocator
#include system_error
#include thread
#include tuple
#include typeindex
#include type_traits
#include unordered_map
#include unordered_set
#endif#if __cplusplus 201402L
#include shared_mutex
#endif#if __cplusplus 201703L
#include any
#include charconv
// #include execution
#include filesystem
#include optional
#include memory_resource
#include string_view
#include variant
#endif#if __cplusplus 201703L
#include barrier
#include bit
#include compare
#include concepts
#if __cpp_impl_coroutine
# include coroutine
#endif
#include latch
#include numbers
#include ranges
#include span
#include stop_token
#include semaphore
#include source_location
#include syncstream
#include version
#endif
//以上为万能头POJ不能直接用差评
using namespace std;
const int N 1000010;
int w[N];
struct owl {int l, r, v, q;
} tr[N * 4];
void pushup(int u) {tr[u].v tr[u 1].v | tr[u 1 | 1].v;
}
void pushdown(int u) {tr[u].q 0;tr[u 1].q tr[u 1 | 1].q 1;tr[u 1].v tr[u 1 | 1].v tr[u].v;
}
void build(int u, int l, int r) {tr[u].l l;tr[u].r r;if (l r) {tr[u].v 1;return ;}int mid l r 1;build(u 1, l, mid), build(u 1 | 1, mid 1, r);pushup(u);
}
int query(int u, int l,int r) {if (tr[u].q){return tr[u].v;}if (tr[u].l l tr[u].r r){return tr[u].v;}int mid tr[u].l tr[u].r 1;if (r mid){return query(u 1,l,r);}else if (l mid){return query(u 1 | 1,l,r);}else{return query(u 1,l,mid) | query(u 1 | 1,mid 1,r);}
}
void modify(int u, int l, int r, int v) {if (tr[u].q) {pushdown(u);}if (tr[u].l l tr[u].r r) {tr[u].v 1 (v - 1);tr[u].q 1;return ;}int mid tr[u].l tr[u].r 1;if (r mid){modify(u 1,l,r,v);}else if (l mid){modify(u 1 | 1,l,r,v);}else{modify(u 1,l,r,v);modify(u 1 | 1,l,r,v);}pushup(u);
}
int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int L,T,M;cin L T M;build(1,1,L);while (M -- ){char op;cin op;if (op C){int l,r,c;cin l r c;if (l r){swap(l,r);}modify(1,l,r,c);}else{int l,r;cin l r;if (l r){swap(l,r);}int t query(1,l,r);
// cout t endl;int res 0;for (int i 0; i T; i ){if (t ((1 i))){res ;}}cout res \n;}}return 0;
}