RMQ 训练 之 codevs 1690 开关灯 已经搞定

本文详细介绍了懒标记法在线段树中的应用,通过维护黑灯数量的示例,展示了如何更新和查询区间信息,提供了完整的代码实现,并解释了量纲的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路 懒标记法  记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次  记住是下方 量纲不要乱  否则写的一堆渣代码  

我的代码里面black是维护黑灯的数量 其实做烦了  如果是维护白灯数量更简单

 1 #include<iostream>  
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<vector>
 5 #include<algorithm>
 6 #define lson l,mid,rt<<1
 7 #define rson mid+1,r,rt<<1|1
 8 #define lrt rt<<1
 9 #define rrt rt<<1|1
10 #define getmid int mid=(l+r)/2
11 using namespace std;
12 const int maxn=1100000;
13 
14 int n,m,black[maxn*4],stop[maxn*4];
15 
16 void pushdown(int l,int r,int rt)
17 {
18     getmid;
19     stop[lrt]+=stop[rt];
20     stop[rrt]+=stop[rt];
21     if(stop[rt]%2==1) 
22     {
23         black[lrt]=mid-l+1-black[lrt];
24         black[rrt]=r-mid-black[rrt];
25     }
26     stop[rt]=0;
27 }
28 
29 
30 void bud(int l,int r,int rt)
31 {
32     if(l==r) {
33         black[rt]=1;
34         return;
35     }
36     getmid;
37     bud(lson);
38     bud(rson);
39     black[rt]=black[lrt]+black[rrt];
40 }
41 
42 int query(int l,int r,int rt,int a,int b)
43 {
44     pushdown(l,r,rt);
45     if(a<=l && b>=r)
46     {
47         return black[rt];
48     }
49     
50     getmid;
51     int ans=0;
52     if(a<=mid) ans=query(lson,a,b);
53     if(b>mid) ans=ans+query(rson,a,b); 
54     return ans;
55 }
56 
57 void update(int l,int r,int rt,int a,int b)
58 {
59     pushdown(l,r,rt);
60     if(a<=l && b>=r)
61     {
62         black[rt]=r-l+1-black[rt];
63         stop[rt]++;
64         return;
65     }
66     getmid;
67     if(a<=mid) {update(lson,a,b);}
68     if(b>mid) {update(rson,a,b);}
69     black[rt]=black[lrt]+black[rrt];
70 }
71 
72 
73 int main()
74 {
75     //freopen("lites.in","r",stdin);
76     //freopen("lites.out","w",stdout);
77     scanf("%d%d",&n,&m);
78     bud(1,n,1);
79     
80     
81     for(int i=1,a,b,c;i<=m;i++)
82     {
83         scanf("%d%d%d",&a,&b,&c);
84         if(a==0)
85         {
86             update(1,n,1,b,c);
87         }
88         else
89         {
90             cout<<c-b+1-query(1,n,1,b,c)<<endl;;
91         }
92     }
93     
94     
95     
96     return 0;
97 }

 

转载于:https://www.cnblogs.com/teacherqing/p/6226119.html

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值