区间开关灯模型

P3870 [TJOI2009] 开关

先看一道经典的区间开关灯问题的模型,维护一个lz 每次异或操作就好了

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
const int N = 1e5+10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
int qmi(int a,int b,int mod){int res=1;while(b){if(b&1)res=res*a%mod;b>>=1;a=a*a%mod;}return res;}int n,q,m;// int e[N],ne[N],w[N],h[N],idx;
// void add(int a,int b,int c){// e[idx] = b,ne[idx] = h[a],w[idx] = c,h[a] = idx++;
// }struct Segment{int l,r;int lz;int s;
}tr[N<<2];void pushup(int u){tr[u].s = tr[u<<1].s + tr[u<<1|1].s;
}void pushdown(int u){if(tr[u].lz){tr[u<<1].lz^=1;tr[u<<1|1].lz^=1;tr[u<<1].s = tr[u<<1].r-tr[u<<1].l+1-tr[u<<1].s;tr[u<<1|1].s = tr[u<<1|1].r-tr[u<<1|1].l+1-tr[u<<1|1].s;tr[u].lz = 0;}
}void build(int u,int l,int r){tr[u] = {l,r,0,0};if(l==r)return;int mid = (l+r)/2;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);
}void modify(int u,int l,int r){if(l<=tr[u].l&&tr[u].r<=r){tr[u].lz^=1;tr[u].s = tr[u].r-tr[u].l+1-tr[u].s;return;}pushdown(u);int mid = (tr[u].l+tr[u].r)/2;if(l<=mid)modify(u<<1,l,r);if(r>mid)modify(u<<1|1,l,r);pushup(u);
}int query(int u,int l,int r){if(l<=tr[u].l&&tr[u].r<=r){return tr[u].s;}pushdown(u);int res = 0;int mid = (tr[u].l+tr[u].r)/2;if(l<=mid)res+=query(u<<1,l,r);if(r>mid)res+=query(u<<1|1,l,r);return res;}void solve()
{cin>>n>>q;build(1,1,n);while(q--){int op,l,r;cin>>op>>l>>r;if(!op)modify(1,l,r);else cout<<query(1,l,r)<<"\n";}}signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _;//cin>>_;_ = 1;while(_--)solve();return 0;
}

E. Danil and a Part-time Job

再看一道这个问题的树上版本

结合一下dfn序处理区间问题就好了

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
const int N = 2e5+10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
int qmi(int a,int b,int mod){int res=1;while(b){if(b&1)res=res*a%mod;b>>=1;a=a*a%mod;}return res;}int n,q,m;// int e[N],ne[N],w[N],h[N],idx;
// void add(int a,int b,int c){// e[idx] = b,ne[idx] = h[a],w[idx] = c,h[a] = idx++;
// }
int cost[N];
int dfn[N],in[N],out[N],times;
vector<int>g[N];struct Segment{int l,r;int lz;int s;
}tr[N<<2];void dfs(int u){in[u] = ++times;dfn[times] = u;for(int &t:g[u])dfs(t);out[u] = times;
}void pushup(int u){tr[u].s = tr[u<<1].s + tr[u<<1|1].s;
}void pushdown(int u){if(tr[u].lz){tr[u<<1].lz^=1;tr[u<<1|1].lz^=1;tr[u<<1].s = tr[u<<1].r-tr[u<<1].l+1-tr[u<<1].s;tr[u<<1|1].s = tr[u<<1|1].r-tr[u<<1|1].l+1-tr[u<<1|1].s;tr[u].lz = 0;}
}void build(int u,int l,int r){tr[u] = {l,r};if(l==r){tr[u].lz = 0;tr[u].s = cost[dfn[l]];return;}int mid = (l+r)/2;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);
}void modify(int u,int l,int r){if(l<=tr[u].l&&tr[u].r<=r){tr[u].lz^=1;tr[u].s = tr[u].r-tr[u].l+1-tr[u].s;return;}pushdown(u);int mid = (tr[u].l+tr[u].r)/2;if(l<=mid)modify(u<<1,l,r);if(r>mid)modify(u<<1|1,l,r);pushup(u);
}int query(int u,int l,int r){if(l<=tr[u].l&&tr[u].r<=r){return tr[u].s;}pushdown(u);int res = 0;int mid = (tr[u].l+tr[u].r)/2;if(l<=mid)res+=query(u<<1,l,r);if(r>mid)res+=query(u<<1|1,l,r);return res;}void solve()
{cin>>n;for(int i=2;i<=n;++i){int fa;cin>>fa;g[fa].push_back(i);}dfs(1);for(int i=1;i<=n;i++)cin>>cost[i];build(1,1,n);cin>>q;while(q--){string op;cin>>op;int id;cin>>id;if(op=="get")cout<<query(1,in[id],out[id])<<"\n";else modify(1,in[id],out[id]);}}signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int _;//cin>>_;_ = 1;while(_--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

道可云元宇宙每日资讯|国家能源局:探索推广虚拟电厂等新技术

道可云元宇宙每日简报&#xff08;2024年3月25日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 国家能源局&#xff1a;探索推广虚拟电厂等新技术 国家能源局印发《2024年能源工作指导意见》&#xff0c;其中提出&#xff0c;促进能源新技术应用示范。组织开展能…

卸载docker

对于使用systemd的系统&#xff08;如Ubuntu、Debian、CentOS 7及以上版本&#xff09;&#xff1a; 停止Docker服务&#xff1a; sudo systemctl stop docker 卸载Docker程序包&#xff1a; 对于使用apt的系统&#xff08;如Ubuntu、Debian&#xff09;&#xff1a; sudo a…

RCG如何将带有噪声的表征+条件输入RDM并得到去噪的表征

一、有条件去噪控制 很简单的一个模型&#xff0c;整体来说就是将“内容&#xff08;图像&#xff09;” “图像所对应的标签” “每个噪声表征对应的时间步Timestap”分别输入进线性层Layer&#xff0c;然后将他们的表征相加&#xff08;&#xff09;即可 执行步骤是&…

FCP270 P0917YZ 兼容性如何

FCP270 P0917YZ 是一种现场控制处理器&#xff0c;通常应用于工业自动化和过程控制系统中。 这款现场控制处理器的主要职责是监测和控制多种过程变量&#xff0c;确保系统的正常运行&#xff0c;并且满足生产的要求。以下是关于FCP270 P0917YZ的一些可能用途和特点&#xff1a…

vue3挂载axios挂载全局方法

vue3中在 // main.jsimport axios from "axios"; app.provide("$axios", axios);app.mount("#app");// Home.vue import { inject } from "vue"; const http inject("$axios");const getUser () > {http.post("…

HWOD:名字的漂亮度

一、题目 描述 给出一个字符串&#xff0c;该字符串仅由小写字母组成&#xff0c;定义这个字符串的漂亮度是其所有字母漂亮度的总和 每个字母都有一个漂亮度&#xff0c;范围在1到26之间。没有任何两个不同字母拥有相同的漂亮度。字母忽略大小写。 给出多个字符串&#xff…

MySQL 常用函数总结【持续更新】

1、根据起止日期获取二者之间的秒数 SELECT TIMESTAMPDIFF(SECOND, kssj, jssj) , kssj , jssj from your_table 起止日期应该是DATETIME、TIMESTAMP或DATE类型的列。如果它们是字符串&#xff0c;你可能需要先将它们转换为日期或时间戳类型&#xff1b; 第一个参数&#xf…

船舶航行突发事故3D模拟仿真演练优化搜救路线

在波澜壮阔的海洋世界中&#xff0c;船舶事故与搜救行动始终牵动着无数人的心。为了更好地应对这些挑战&#xff0c;我们倾力打造了3D船舶事故和搜救情景再现系统&#xff0c;旨在以科技之力为海事安全保驾护航。 该系统采用先进的web3D开发渲染技术&#xff0c;能够真实模拟船…

探索ttkbootstrap:让Python GUI开发更简洁高效

介绍 探索ttkbootstrap&#xff1a;让Python GUI开发更简洁高效.在Python的GUI开发领域&#xff0c;有许多优秀的工具和库可以帮助开发者快速构建出漂亮、功能丰富的用户界面。而在这些工具中&#xff0c;ttkbootstrap 脱颖而出&#xff0c;为Python开发者带来了更简洁高效的G…

实验3 中文分词

必做题&#xff1a; 数据准备&#xff1a;academy_titles.txt为“考硕考博”板块的帖子标题&#xff0c;job_titles.txt为“招聘信息”板块的帖子标题&#xff0c;使用jieba工具对academy_titles.txt进行分词&#xff0c;接着去除停用词&#xff0c;然后统计词频&#xff0c;最…

火山引擎VeDI:A/B测试开放平台正式上线,企业个性化平台一键定制

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 火山引擎数智平台VeDI旗下的A/B测试平台&#xff08;DataTester&#xff09;&#xff0c;旨在为企业提供科学且可信的A/B测试能力及丰富的场景实验支持。随着企业的…

java常用优秀开发框架及工具类汇总

目录 1、各类系统及简称扫盲2、开发框架2.1、若依(ruoyi) 3、工具组件3.1、java工具类库3.1.1、HuTool3.1.2、office、excel、pdf文档处理3.1.3、运行日志管理3.1.4、数据层框架3.1.5、数据库连接池 java发展了很多年&#xff0c;为了便于开发&#xff0c;出现刴优秀的开发框架…

知识图谱操作的探索与利用

目录 前言1 搜索&#xff08;Search&#xff09;1.1 基于关键词搜索1.2 属性搜索1.3 模式匹配 2 过滤&#xff08;Filtering&#xff09;2.1 属性过滤2.2 关系过滤 3 引导&#xff08;Guidance&#xff09;3.1 相关实体推荐3.2 路径推荐 4 合并&#xff08;Merging&#xff09;…

WPF自定义Panel:让拖拽变得更简单

在 WPF 应用程序中&#xff0c;拖放操作是实现用户交互的重要组成部分。通过拖放操作&#xff0c;用户可以轻松地将数据从一个位置移动到另一个位置&#xff0c;或者将控件从一个容器移动到另一个容器。然而&#xff0c;WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问…

智慧公厕的技术融合策略

智慧公厕是迎合现代城市发展需要的一项重要基础设施&#xff0c;其设计的技术融合策略在实现公共厕所泛在感知、互通互联、协同构筑智慧城市等方面起到了关键作用。本文将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图实例&#xff0c;从物…

Mathematica使用笔记

文章目录 1. 数组定义及访问2. 表达式替换3. 清除变量4. 匿名函数&#xff08;纯函数&#xff09;5. 化简6. 求导7. 积分8. 求解方程及方程组8.1 求解方程形式8.2 求解方程组形式8.3 设置根式解显示方式 9. 表达式转C10. 提取多项式系数 1. 数组定义及访问 A {1,2,3} B {{1,…

数字兆欧表的量程选择技巧,你需要知道的秘密!

使用数字兆欧表的方法如下&#xff1a; 步骤一&#xff1a;准备工作 在开始操作之前&#xff0c;务必确保待测电气设备已经断电并进行了充分放电&#xff0c;以保证操作的安全性。此外&#xff0c;还需检查数字兆欧表的电量是否足够&#xff0c;外观是否完好&#xff0c;并确保…

元宇宙虚拟展厅——虚拟场景同现实世界的结合宣传

元宇宙作为具有前瞻性和先导性的未来产业&#xff0c;在政策布局、产业发展以及应用融合等方面也都实现了诸多探索。元宇宙虚拟展厅是虚拟场景同现实世界的结合&#xff0c;元宇宙与展厅的应用融合打破了传统展厅、传统宣传对时间和空间的限制&#xff0c;以往我们印刷过数不胜…

Wagtail-基于Python Django的内容管理系统CMS实现公网访问

目录 ⛳️推荐 前言 1. 安装并运行Wagtail 1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具 3. 实现Wagtail公网访问 4. 固定Wagtail公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给…

MySQL 8 索引原理详细分析

千山万水总是情, 问问索引行不行? 轻舟已过万重山, 有种尽管来发难。 索引是在数据库优化时的重要手段之一,今天 V 哥从索引的角度展开讲一讲索引的各个要点,希望可以通过这篇文章,帮助大家彻底搞透索引的关键点。 1.索引的定义与作用2.索引的类型3.索引原理4.二分查…