当前位置: 首页 > news >正文

《P5445 [APIO2019] 路灯》

题目描述

一辆自动驾驶的出租车正在 Innopolis 的街道上行驶。该街道上有 n+1 个停车站点,它们将街道划分成了 n 条路段。每一路段都拥有一个路灯。当第 i 个路灯亮起,它将照亮连接第 i 与第 i+1 个站点的路段。否则这条路段将是黑暗的。

安全起见,出租车只能在被照亮的路段上行驶。换言之,出租车能从站点 a 出发到达站点 b(a<b) 的条件是:连接站点 a 与 a+1,a+1 与 a+2,……,b−1 与 b 的路段都被照亮。

在经过一些意外故障或修理之后,街道上的路灯可能是亮起的,也可能是熄灭的。

现在给定 0 时刻时,街道上路灯的初始状态。之后 1,2,…,q 时刻,每时刻会发生下列两种事件之一:

  • toggle i:切换第 i 个路灯的状态。具体地说,若路灯原来亮起,则现在将熄灭;若路灯原来熄灭,则现在将亮起。

  • query a b:出租车部门的负责人想知道,从 0 时刻起到当前时刻,有多少个时刻满足:出租车能够从站点 a 出发到达站点 b。

请你帮助出租车部门的负责人回答他们的问题。

输入格式

第一行包含两个整数 n 和 q,表示路灯的数量与时刻数。

第二行包含一个字符串 s 表示路灯的初始状态,si​ 为 1 表示第 i 个路灯初始时亮起;si​ 为 0 表示第 i 个路灯初始时熄灭。

接下来 q 行每行描述一个时刻的事件。第 i 行描述时刻 i 所发生的事件:

  • toggle i:该时刻切换了第 i 个路灯的状态。

  • query a b:计算从 0 时刻起到该时刻,共有多少个时刻满足:出租车能从站点 a 出发到达站点 b。

至少有一个时刻的事件是 query。

输出格式

对于每个 query 的事件,输出一行单个整数,表示该问题的答案。

输入输出样例

输入 #1复制

5 7 11011 query 1 2 query 1 2 query 1 6 query 3 4 toggle 3 query 3 4 query 1 6

输出 #1复制

1 2 0 0 1 2

说明/提示

对于全部数据,1≤n,q≤3×105,∣s∣=n,1≤i≤n,1≤a<b≤n+1。

详细子任务附加限制与分值如下表

子任务附加限制分值
1n, q≤10020
2对于所有 query a b 事件,满足 a=b−120
3对于所有 toggle i 事件,第 i 个路灯将被点亮20
4所有 toggle 事件都发生在第一个 query 事件之前20
5无特殊限制

20

代码实现:

#include <iostream> #include <cmath> #include <cstring> #include <algorithm> #include <set> using namespace std; const int N=300100; int n,q,x,y; int st[N<<2]; char ch[N],op[10]; namespace t2{ #define mid (l+r>>1) #define lb(x) ((x)&(-(x))) int rt[N<<1],cnt; struct node{ int l,r,sum; }tr[N<<7]; void upd(int &p, int l, int r, int pos, int k){ if(!p) p=++cnt; tr[p].sum += k; if(l == r) return; if(pos <= mid) upd(tr[p].l, l, mid, pos, k); else upd(tr[p].r, mid+1, r, pos, k); } int qry(int p, int l, int r, int L, int R){ if(!p || L>R || l>R || r<L) return 0; if(L<=l && r<=R) return tr[p].sum; return qry(tr[p].l, l, mid, L, R) + qry(tr[p].r, mid+1, r, L, R); } void add(int x, int y, int k){ for(;x<=n+1;x+=lb(x)) upd(rt[x], 1, n+1, y, k); } int query(int x, int y){ int res=0; for(;x;x-=lb(x)) res += qry(rt[x], 1, n+1, 1, y); return res; } } namespace st_set{ #define it set<nd>::iterator struct nd{ int l,r; bool operator < (const nd &b) const { return r < b.r; } }; set<nd> s; void init(){ for(int i=1;i<=n;i++) s.insert(nd{i,i}); } void merge(int x1,int x2,int y1,int y2){ s.erase(nd{x1,x2}); s.erase(nd{y1,y2}); s.insert(nd{x1,y2}); } void split(int x1,int x2,int y1,int y2){ s.erase(nd{x1,y2}); s.insert(nd{x1,x2}); s.insert(nd{y1,y2}); } bool same(int x,int y){ return s.lower_bound(nd{0,x})->l == s.lower_bound(nd{0,y})->l; } } using namespace t2; using namespace st_set; void add_diff(int x1,int y1,int x2,int y2,int k){ add(x1,y1,k); add(x2+1,y2+1,k); add(x1,y2+1,-k); add(x2+1,y1,-k); } int main(){ scanf("%d%d",&n,&q); n++; scanf("%s",ch+1); init(); for(int i=1;i<=n-1;i++){ st[i] = ch[i]-'0'; if(st[i]) merge(s.lower_bound(nd{0,i})->l, i, i+1, i+1); } for(it i=s.begin();i!=s.end();i++) add_diff(i->l,i->l,i->r,i->r,q); for(int i=1;i<=q;i++){ scanf("%s",op+1); if(op[1]=='q'){ scanf("%d%d",&x,&y); int res=query(x,y); if(same(x,y)) res -= q-i; cout<<res<<'\n'; } if(op[1]=='t'){ scanf("%d",&x); it iter = s.lower_bound(nd{0,x}); int x1=iter->l, x2=x, y1=x+1; if(st[x]){ int y2=iter->r; add_diff(x1,y1,x2,y2,i-q); split(x1,x2,y1,y2); } else{ int y2=(++iter)->r; add_diff(x1,y1,x2,y2,q-i); merge(x1,x2,y1,y2); } st[x]^=1; } } return 0; }
http://www.jsqmd.com/news/371162/

相关文章:

  • 2026年有实力的嵌入式系统定制开发,物联网设备定制开发厂家用户优选名录 - 品牌鉴赏师
  • Scala 语言基础:语法、数据结构与控制结构
  • Elasticsearch:交易搜索 - Index search tool
  • 2026年评价高的隐藏家具滑轨/三维家具滑轨哪家靠谱公司口碑推荐(畅销) - 行业平台推荐
  • 题解:AWC 0003
  • 5万字详解《使用 LangGraph, FastAPI, MCP and Docker 构建通用 AI 智能体:自主系统原理与应用实战》
  • 2026年评价高的滚珠丝杆升降机/电动丝杆升降机源头直供参考哪家便宜 - 行业平台推荐
  • 2026年质量好的同步阻尼隐藏轨/橱柜阻尼隐藏轨怎么选实力工厂参考 - 行业平台推荐
  • 2026年评价高的隐形门液压合页/液压合页口碑排行热门品牌推荐(实用) - 行业平台推荐
  • CF298A Snow Footprints 题解
  • 2026年口碑好的冰箱重型滑轨/不锈钢重型滑轨直销厂家采购指南如何选 - 行业平台推荐
  • 2026年质量好的毛绒玩具激光切割机/小视觉激光切割机哪家强生产厂家实力参考 - 行业平台推荐
  • 欧盟与印度自贸协定开启IT服务新时代
  • AI系统安全加固方案:架构师如何设计安全的密钥管理系统
  • Snow Footprints CodeForces - 298A 的题解
  • 大卫·德雷曼的对比优势:在市场低迷时逆向而行
  • 微软二月补丁日修复六个零日漏洞
  • 提示工程架构师实战:用Agentic AI提升prompt的“泛化能力”
  • Fact2Fiction Targeted Poisoning Attack to Agentic Fact-checking System
  • Arctic Wolf瞄准亚太地区中端市场网络安全缺口
  • 2026年口碑好的医用抽屉滑轨/骑马抽屉滑轨厂家热卖产品推荐(近期) - 行业平台推荐
  • 2026 年四川月嫂培训、养老护理培训怎么选,五大核心痛点 + 真实排名帮你避坑 - 深度智识库
  • 2026年知名的阻尼静音平面铰链/进口品牌平面铰链源头直供参考哪家便宜 - 行业平台推荐
  • 2026年比较好的郑州电力管/郑州cpvc电力管推荐几家可靠供应商参考 - 行业平台推荐
  • 2026年热门的无尘车间净化铝型材/包边净化铝型材供应商采购指南怎么联系 - 行业平台推荐
  • 2026年靠谱的减速机/精密行星减速机可靠供应商参考推荐几家 - 行业平台推荐
  • 从GPT到LLaMA:提示工程架构师对比移动端大模型提示策略差异
  • 2026冷却塔行业十大服务商:玻璃钢环保制品全链路解决方案新标杆 - 深度智识库
  • 稳定基因敲低细胞系(Stable Gene Knockdown Cell Line)是什么?从 RNAi / CRISPRi 到 HEK293、CHO 稳态抑制模型的系统理解
  • 大数据环境下Doris架构设计全解析