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. JavaScript实现生成指定范围随机数和一个包含不重复数的随机数组

    目前JavaScript里面还没有现成的方法可以实现这个简单地需求,我们就需要自己写代码了. 在js中有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 我们的简单的改 ...

  2. Node.JS-经典教程

    目录 1. 下载地址 2. 目录 1. 下载地址 https://www.cnblogs.com/coco56/p/11223189.html 在视频教程那里 2. 目录 00课件.rar 01.历史 ...

  3. JS 控制子页面刷新父页面

    iframe里面的子页,用parent.location.href = parent.location.reload();如果是window.open 打开就用opener.location.relo ...

  4. Nginx优化_压缩处理与内存缓存

    对页面进行压缩处理; 服务器内存缓存. 1.对页面进行压缩处理 [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf http { ... gzip ...

  5. P1864 [NOI2009]二叉查找树

    链接P1864 [NOI2009]二叉查找树 这题还是蛮难的--是我菜. 题目描述中的一大堆其实就是在描述\(treap.\),考虑\(treap\)的一些性质: 首先不管怎么转,中序遍历是确定的,所 ...

  6. 查看ubuntu系统信息

    root@k8s001:~/go/src/k8s.io/kubernetes# cat /etc/*release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DI ...

  7. ConversionService HttpMessageConverter

    ConversionService是属于spring core部分 所有spring管理的bean等等 都使用它进行类型转换,而它又需要注册一些converter 来完成类型转换. 这个可以看我博客 ...

  8. 做网站用php还是python

    单纯说做网站,显然是php更适合,php是专为web而生,而Python只是可以做web.php也比python更简单,更容易学,对于新手更友好. 从权威技术网站w3techs.com2017年7月2 ...

  9. DEDECMS编辑器粘贴Word

    我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...

  10. 2017ICPC沈阳网络赛 HDU 6205 -- card card card(最大子段和)

    card card card Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...