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. pg_controldata - 显示一个 PostgreSQL 集群的控制信息

    SYNOPSIS pg_controldata [ datadir] DESCRIPTION 描述 pg_controldata 打印那些在 initdb 过程中初始化的信息,比如表版本和服务器的区域 ...

  2. 8-基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台

    基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台 1.板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含双片TI DSP TMS320C ...

  3. [POI2006]ORK-Ploughing(贪心,枚举)

    [POI2006]ORK-Ploughing 题目描述 Byteasar, the farmer, wants to plough his rectangular field. He can begi ...

  4. Sumdiv(约数和问题)

    题目地址 看到这题的题解,大佬都说是小学奥数,蔡得我不敢鸡声. 求 \(a^b\) 所有的约数之和 mod \(9901\) \((1<=a,b<=5*10^7)\) 题解 做这道题,我还 ...

  5. [sqlmap源码阅读] 数据库识别

    通过网页返回的数据库错误信息识别网站所有数据库类型,用到的正则表达式及支持识别的数据库类型,这些信息以xml文件的形式存在,使用 sax 解析xml.

  6. [python 学习]正则表达式

    re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...

  7. 命令——tr

    文本处理工具命令——tr 一帮助说明 TR() User Commands TR() NAME tr - translate or delete characters SYNOPSIS tr [OPT ...

  8. 108天南京银行完成不可能完成的新金融DevOps转型

    在2018云栖大会南京峰会企业研发云专场,由南京银行研发管理负责人吴攀带来了“云效助力新金融DevOps转型——南京银行实践之路”的主题分享.首先对南京银行的研发规模与成长做了介绍,对“鑫云+”的诞生 ...

  9. Window10彻底卸载应用商店

    Window10如何彻底卸载应用商店?Window10应用商店就是一个应用下载平台,我们可以在应用商店中下载各种应用,但是很多用户并不喜欢在Window10应用商店中下载应用,觉得应用商店浪费内存,因 ...

  10. Android逆向之旅---解析编译之后的Dex文件格式

    一.前言 新的一年又开始了,大家是否还记得去年年末的时候,我们还有一件事没有做,那就是解析Android中编译之后的classes.dex文件格式,我们在去年的时候已经介绍了: 如何解析编译之后的xm ...