ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

poj2777 线段树状态压缩

2022-02-02 23:03:39  阅读:100  来源: 互联网

标签:int 线段 d% mid poj2777 ans query include 压缩


 1 #include<iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 #include<cstring>
 5 #define ls (x<<1)
 6 #define rs (x<<1|1)
 7 using namespace std;
 8 const int N=1e5+5;
 9 int sum[N<<2],tag[N<<2];
10 int n,m,t;
11 void update(int x){sum[x]=sum[ls]|sum[rs];}
12 void down(int l,int r,int x)
13 {
14     if(tag[x])
15     {
16         tag[ls]=tag[rs]=tag[x];
17         sum[ls]=1<<tag[x];
18         sum[rs]=1<<tag[x];
19         tag[x]=0;
20     }
21 }
22 void build(int l,int r,int x)
23 {
24     if(l==r)
25     {
26         sum[x]=2;
27         return;
28     }
29     int mid=(l+r)>>1;
30     build(l,mid,ls);
31     build(mid+1,r,rs);
32     update(x);
33 }
34 void modify(int A,int B,int l,int r,int v,int x)
35 {
36     if(A<=l&&B>=r)
37     {
38         tag[x]=v;
39         sum[x]=1<<v;
40         return;
41     }
42     down(l,r,x);
43     int mid=(l+r)>>1;
44     if(A<=mid)modify(A,B,l,mid,v,ls);
45     if(B>mid)modify(A,B,mid+1,r,v,rs);
46     update(x);
47 }
48 int query(int A,int B,int l,int r,int x)
49 {
50     if(A<=l&&B>=r)return sum[x];
51     down(l,r,x);
52     int mid=(l+r)>>1,ans=0;
53     if(A<=mid)ans|=query(A,B,l,mid,ls);
54     if(B>mid)ans|=query(A,B,mid+1,r,rs);
55     return ans;
56 }
57 
58 int main()
59 {
60     scanf("%d%d%d",&n,&t,&m);
61     build(1,n,1);
62     char op[2];
63     for(int i=1;i<=m;i++)
64     {
65         
66         scanf("%s",op);
67         if(op[0]=='C')
68         {
69             int l,r,v;
70             scanf("%d%d%d",&l,&r,&v); 
71             if(l>r)swap(l,r);
72             modify(l,r,1,n,v,1);
73         }
74         else
75         {
76             int l,r;
77             scanf("%d%d",&l,&r);
78             if(l>r)swap(l,r);
79             int ans=query(l,r,1,n,1),cnt=0;
80             for(int i=31;i>=0;i--)if(ans>>i&1)cnt++;
81             printf("%d\n",cnt);    
82         }
83     }
84     return 0;
85 }

 

标签:int,线段,d%,mid,poj2777,ans,query,include,压缩
来源: https://www.cnblogs.com/matt-su/p/15860922.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有