題意:給出n(1e5)的長度的木棒,初始的顏色都為1,給出顏色種類t(1<=t<=30),給出q(1e5)個操作, c l r x 將l到r內的所有顏色更改為x , p l r 問在l到r內有多少種顏色。
解法:觀察發現顏色種類不多,將顏色轉為二進位制,每一位代表一種顏色,1表示有改顏色。
用線段樹儲存下當前的每一段的顏色,更改用陣列lazy標記,將顏色轉化為二進位制數,統計一段顏色時,對每一段可以對它的左右子樹取 | 這樣就可以統計這一段中的顏色出現的種類。
//#include#include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll ;#define int ll
#define mod 1000000007
#define gcd __gcd
#define rep(i , j , n) for(int i = j ; i <= n ; i++)
#define red(i , n , j) for(int i = n ; i >= j ; i--)
#define me(x , y) memset(x , y , sizeof(x))
//ll lcm(ll a , ll b)
ll quickpow(ll a , ll b)return ans;}
//int euler1(int x)if(x>1)ans-=ans/x;return ans;}
//const int n = 1e7+9; int vis[n],prime[n],phi[n];int euler2(int n)for(int j=1;j#define fi first
#define se second
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int n = 1e6+100;
const int maxn = 1e5+9;
int n , t , q ;
int cl[maxn<<2] , lazy[maxn<<2];
char s[5];
void pushup(int rt)
void pushdown(int rt)
void build(int l , int r , int rt)
int mid = (l + r) >> 1 ;
build(lson);
build(rson);
pushup(rt);
}void update(int l , int r , int l , int r , int rt , int c)
if(lazy[rt]) pushdown(rt);
int mid = (l + r) >> 1;
if(mid >= l) update(l , r , lson , c);
if(mid < r) update(l , r , rson , c);
pushup(rt);
}int query(int l , int r , int l , int r , int rt)
if(lazy[rt]) pushdown(rt);
int mid = (l + r) >> 1;
if(mid >= l) sum |= query(l , r , lson);
if(mid < r) sum |= query(l , r , rson);
return sum;
}int ans(int sum)
return cnt ;
}void solve()else
}}signed main()
二進位制狀態壓縮
二進位制狀態壓縮,即將乙個長度為m的bool陣列用乙個m位的二進位制數來表示和儲存 操作運算 取出整數n在二進位制表示下的第k位 n k 1 取出整數n在二進位制表示下的第0 k 1位 後 k 位 n 1 取出整數n在二進位制表示下的第k位取反 n xor 1 取出整數n在二進位制表示下的第k位賦值...
Sleep Buddies (二進位制狀態壓縮)
演算法 狀態壓縮,把每乙個集合都壓縮成乙個數字。使用方法 把每個狀態都進行1 ac code 1 include 2 using namespace std 3 typedef long long ll 4 const int maxn 1e5 10 5 define rep i,first,las...
總結 二進位制狀態壓縮
目錄 二 二進位制狀態壓縮的操作 三 具體應用 1.定義 二進位制狀態壓縮,是指將乙個長度為 m 的 bool 型別陣列用乙個二進位制下有 m 位的整數表示並儲存的方法。2.應用範圍 二進位制狀態壓縮是狀態壓縮動態規劃,寬度優先搜尋狀態壓縮優化的重要基礎。我們在構建程式時一定要注意 在 m 位二進位...