HDU - 6183 动态开点线段树 || 令人绝望的线段树
一看C才[0,50],肯定要开51棵线段树维护y区间的最小x值啦
是男人就上51棵..等等空间爆几倍了
动态开点!51棵线段树用全局节点变量控制,有点像主席树
清空工作很简单,把51个树根清掉然后回收节点(tot=0)就行了
然而!真不知道那些内部数据是有多恶心的
MLE × 4
RTE × 4
最后在query那里强行截断9900ms+水过.....
看了下空间占用才8000k左右hhh
现场赛能做出来得键盘开光吧
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define clr(a,b) memset(a,b,sizeof a)
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
const int maxn = 2e6+5e5+11;
const int oo = 0x3f3f3f3f;
int T[70];
struct ST{
int L[maxn<<2],R[maxn<<2],minx[maxn<<2];
int tot;
void init(){
clr(T,0);
tot=0;
L[0]=R[0]=0;
minx[0]=oo;
}
void pu(int o){
minx[o]=min(minx[L[o]],minx[R[o]]);
}
void update(int &o,int l,int r,int y,int x){
if(!o){
o=++tot;
L[o]=R[o]=0;
minx[o]=x;
}
if(l==r){
minx[o]=min(minx[o],x);
return ;
}
int m=l+r>>1;
if(y<=m) update(L[o],l,m,y,x);
else update(R[o],m+1,r,y,x);
pu(o);
}
int query(int &o,int l,int r,int LL,int RR){
if(!o){
return oo; //很重要!!!
}
if(LL<=l&&r<=RR){
return minx[o];
}
int m=l+r>>1;
int ans=oo;
if(LL<=m) ans=min(ans,query(L[o],l,m,LL,RR));
if(RR>m) ans=min(ans,query(R[o],m+1,r,LL,RR));
return ans;
}
}st;
const int n = 1e6;
int main(){
int op,x,y,yy1,yy2,c;
st.init();
while(scanf("%d",&op)!=EOF){
if(op==3)break;
else if(op==0) st.init();
else if(op==1){
scanf("%d%d%d",&x,&y,&c);
st.update(T[c],1,n,y,x);
}
else if(op==2){
scanf("%d%d%d",&x,&yy1,&yy2);
int ans=0,tmp;
rep(i,0,50){
tmp=st.query(T[i],1,n,yy1,yy2);
if(tmp<=x) ans++;
}
printf("%d\n",ans);
}
}
return 0;
}
HDU - 6183 动态开点线段树 || 令人绝望的线段树的更多相关文章
- BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...
- Subtree Minimum Query CodeForces - 893F (线段树合并+线段树动态开点)
题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询 ...
- P3157 [CQOI2011]动态逆序对(树状数组套线段树)
P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...
- K - 回转寿司(值域段数(板题) + 动态开点)
回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个 ...
- HDU 6183 Color it(动态开点线段树)
题目原网址:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题目中文翻译: Time Limit: 20000/10000 MS (Java/Others ...
- HDU - 6183 暴力,线段树动态开点,cdq分治
B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...
- hdu 6183 Color it (线段树 动态开点)
Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...
- HDU - 6183:Color it (线段树&动态开点||CDQ分治)
Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...
- HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Tota ...
随机推荐
- 虚拟机Ubuntu16.04安装lrzsz
[系统环境] 宿主机:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16.0.4 [目的] 配合Secure CRT使用rz,sz,方便在Ubuntu ...
- EZOJ #201
传送门 分析 这个题和寿司晚宴有点像 我们知道大于$\sqrt n$的质因子最高就是一次 于是我们对所有数以他的大质数为关键字排序 设dp[i][p2][p3][p5][p7][p11][p13][0 ...
- 函数有一个特殊的属性 prototype!
JavaScript 中只有对象,没有类. 实际上,JavaScript 才是真正应该被称为「面向对象」的语言,因为它是少有的可以不通过类,直接创建对象的语言. 函数的 prototype 属性 在 ...
- Socket编程(c语言示例)
转自:http://blog.csdn.net/dxpqxb/article/details/8166423 前言 Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序 ...
- wpf 依赖属性注册解释
这个解释的很明白了 http://www.cnblogs.com/xiongpq/archive/2010/06/29/1767905.html
- 类的 where T : class 泛型类型约束
where T : struct | T必须是一个结构类型where T : class T必须是一个类(class)类型where T : new() | T必须要有一个无参构造函数where T ...
- Java java.lang.Thread#join()方法分析
结论:A 线程调用 B 线程对象的 join 方法,则 A 线程会被阻塞,直到 B 线程 挂掉 (Java Doc 原话: Watis for this thread to die). 一.分析 查看 ...
- 【转】android 布局优化
前言 本篇文章为Android优化的布局部分,该部分应该是Android中很重要的,无论是在自定义控件中,还是在简单的书写布局时,都应该尽量遵循一些优化原则,这样布局的绘制效率才会更高,体验才能更好. ...
- post get 方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- 【C#】LINQ
一.什么是LINQ 长期以来,开发社区形成以下的格局: 1.面向对象与数据访问两个领域长期分裂,各自为政. 2.编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如: C#中字符串用str ...