P5445 [APIO2019]路灯

转化为平面上的坐标(x,y),set维护连续区间.

用树套树维护矩阵加法,单点查询。

注意维护矩阵差分的时候,

$(x,y,v)$是对$(x,y)(n+1,n+1)$的矩阵做出贡献

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#define ri register int
using namespace std;
int read(){
char c=getchar(); ri x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+c-,c=getchar();
return x;
}
#define N 600005
#define W 20000005
struct E{
int l,r;
E(int A,int B):l(A),r(B){}
bool operator < (const E &G) const{return r<G.r;}
};set<E> g;
set<E>::iterator it;
int n,T,a[N]; char opt[],cc[N];
int cnt,rt[N],lc[W],rc[W],s[W];
#define mid (l+r)/2
void Ins1(int &o,int l,int r,int x,int v){
if(!o)o=++cnt; s[o]+=v;
if(l==r) return;
if(x<=mid) Ins1(lc[o],l,mid,x,v);
else Ins1(rc[o],mid+,r,x,v);
}
int Ask1(int o,int l,int r,int x1,int x2){
if(!o||x2<l||r<x1) return ;
if(x1<=l&&r<=x2) return s[o];
return Ask1(lc[o],l,mid,x1,x2)+Ask1(rc[o],mid+,r,x1,x2);
}
void Ins2(int x,int y,int v){for(;x<=n+;x+=x&-x)Ins1(rt[x],,n+,y,v);}
int Ask2(int x,int y){int re=; for(;x;x-=x&-x)re+=Ask1(rt[x],,n+,,y); return re;}
inline void Add(int x1,int y1,int x2,int y2,int v){//注意修改标记是对右上的查询产生贡献,并不是平移区间
Ins2(x1,y1,v),Ins2(x1,y2+,-v),Ins2(x2+,y1,-v),Ins2(x2+,y2+,v);
}
int main(){
n=read()+; T=read(); scanf("%s",cc+);
for(ri i=;i<=n;++i) g.insert(E(i,i));
int x,y,pl,pr,ql,qr;
for(ri i=;i<n;++i) if((a[i]=cc[i]-)){
it=g.lower_bound(E(,i+)); --it; pl=(*it).l;
g.erase(it); g.erase(E(i+,i+)); g.insert(E(pl,i+));
}
for(it=g.begin();it!=g.end();++it) Add((*it).l,(*it).l,(*it).r,(*it).r,T);
for(ri t=;t<=T;++t){
scanf("%s",opt);
if(opt[]=='q'){
x=read(); y=read();
pl=(*(g.lower_bound(E(,x)))).l;
ql=(*(g.lower_bound(E(,y)))).l;
printf("%d\n",Ask2(x,y)-(T-t)*(pl==ql));
}else{
x=read();
if(a[x]){
it=g.lower_bound(E(,x));
pl=(*it).l,pr=x; ql=x+,qr=(*it).r;
Add(pl,ql,pr,qr,t-T);
g.erase(it); g.insert(E(pl,pr)); g.insert(E(ql,qr));
}else{
it=g.lower_bound(E(,x));
pl=(*it).l,pr=x; ++it; ql=x+,qr=(*it).r;
Add(pl,ql,pr,qr,T-t);
g.erase(E(pl,pr)); g.erase(E(ql,qr)); g.insert(E(pl,qr));
}a[x]^=;
}
}return ;
}

P5445 [APIO2019]路灯(树套树)的更多相关文章

  1. 【LOJ#3146】[APIO2019]路灯(树套树)

    [LOJ#3146][APIO2019]路灯(树套树) 题面 LOJ 题解 考场上因为\(\text{bridge}\)某个\(\text{subtask}\)没有判\(n=1\)的情况导致我卡了\( ...

  2. 【APIO2019】路灯(ODT & (树套树 | CDQ分治))

    Description 一条 \(n\) 条边,\(n+1\) 个点的链,边有黑有白.若结点 \(a\) 可以到达 \(b\),需要满足 \(a\to b\) 的路径上的边不能有黑的.现给出 \(0\ ...

  3. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  4. BZOJ4170 极光(CDQ分治 或 树套树)

    传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...

  5. bzoj3262: 陌上花开(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. BZOJ 3110 k大数查询 & 树套树

    题意: 有n个位置,每个位置可以看做一个集合,现在要求你实现一个数据结构支持以下功能: 1:在a-b的集合中插入一个数 2:询问a-b集合中所有元素的第k大. SOL: 调得火大! 李建说数据结构题能 ...

  8. BZOJ 3110 树套树 && 永久化标记

    感觉树套树是个非常高深的数据结构.从来没写过 #include <iostream> #include <cstdio> #include <algorithm> ...

  9. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间 ...

随机推荐

  1. [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程

    [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程 [转]超详细MySQL安装及基本使用教程

  2. C++中的const_cast

    开发环境 Qt Creator 4.8.2 编译器版本 MinGw 32-bit const_cast 用法: const_cast<type_id> (expression) 说明: 该 ...

  3. gcc的-D,-w,-W,-Wall,-O3这些参数的意义

    一.-D 其意义是添加宏定义,这个很有用. 当你想要通过宏控制你的程序,不必傻乎乎的在程序里定义,然后需要哪个版本,去修改宏. 只需要在执行gcc的时候,指定-D,后面跟宏的名称即可. 示例: gcc ...

  4. 【串线篇】spring boot全面接管springMvc

    一.Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:(WebMvcAutoC ...

  5. 【串线篇】spring boot外部配置加载顺序

    SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...

  6. ssm框架整合抽取BaseDao接口

    import java.io.Serializable; import java.util.List; /** * DAO基础操作模板 * * @param <T> 泛型 */ publi ...

  7. R语言把DataFrame的一行变成向量

    在R语言里面,DataFrame的一列数据本质上可以认为是一个向量或列表,但是一行数据不是. 今天有一个31列的数据集,由于放在第一行的变量名格式不规范,读入数据的时候不能顺带读入变量名.于是跳过首行 ...

  8. OSI参考模型与TCP/IP参考模型与TCP/IP协议栈

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484126.html OSI参考模型与TCP/IP参考模型与TCP/IP协议栈 TCP/IP分层模型 ...

  9. xiugai2

    <div class="myLoading"> <div class="svg-wrap"> <svg width="8 ...

  10. 牛客提高D6t2 破碎的序列

    分析 我们不难发现对于偶数的情况只要相邻两个数不相等即可 而对于奇数的情况只要中间恰好隔一个数的两个数不相等即可 于是我们又dp[i][0/1]表示考虑到第i位,这一位和它后面离它最近的一个确定的数是 ...