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. windows 10预览版升级win10 7月29 10240.16384

    一路追着win10 从预览版到今天10240.16384 昨晚是中国区第一批下载win10的,不过不是第一批安装的. 早上才安装成功. win10预览版更新 7月29 1024016384 使用esd ...

  2. linux--基础知识5

    #文件合并与文件归档 #cat /etc/passwd > new_pass.txt (创建一个新的文档并将cat/etc/passwd的内容合并进来) #echo "xxxx&quo ...

  3. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  4. POJ 3784 Running Median (动态中位数)

    题目链接:http://poj.org/problem?id=3784 题目大意:依次输入n个数,每当输入奇数个数的时候,求出当前序列的中位数(排好序的中位数). 此题可用各种方法求解. 排序二叉树方 ...

  5. Web核心之JSP

    JSP JSP = HTML + Java + JSP自己的一些语法 JSP也是一个动态网页开发技术. JSP本质 Jsp实际上就是一个Servlet,在jsp被访问时,tomcat会把jsp转换为一 ...

  6. Graph Convolutional Network

    How to do Deep Learning on Graphs with Graph Convolutional Networks https://towardsdatascience.com/h ...

  7. SQL Server数据库的软硬件性能瓶颈

    在过去十年里,很多复杂的企业应用都是用Microsoft SQL Server进行开发和部署的.如今,SQL Server已经成为现代业务应用的基石,并且它还是很多大公司业务流程的核心.SQL Ser ...

  8. [CSP-S模拟测试]:Silhouette(数学)

    题目描述 有一个$n\times n$的网格,在每个格子上堆叠了一些边长为$1$的立方体. 现在给出这个三维几何体的正视图和左视图,求有多少种与之符合的堆叠立方体的方案.两种方案被认为是不同的,当且仅 ...

  9. 给网页标题添加icon小图标

    so easy: 给网页标题添加icon小图标: 直接在html文件的head部分添加下面代码(注意href的路径): <link rel="icon" type=" ...

  10. CF E2 - Daleks' Invasion (medium) (LCA求两点树上路径上的最大边权)

    http://codeforces.com/contest/1184/problem/E2 题意:给出一副图,首先求出这幅图的最小生成树 , 然后修改这幅图上不属于最小生成树的边权,使得修改后的图在求 ...