一看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 动态开点线段树 || 令人绝望的线段树的更多相关文章

  1. BZOJ_4636_蒟蒻的数列_线段树+动态开点

    BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...

  2. Subtree Minimum Query CodeForces - 893F (线段树合并+线段树动态开点)

    题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询 ...

  3. P3157 [CQOI2011]动态逆序对(树状数组套线段树)

    P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...

  4. K - 回转寿司(值域段数(板题) + 动态开点)

    回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个 ...

  5. HDU 6183 Color it(动态开点线段树)

    题目原网址:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题目中文翻译: Time Limit: 20000/10000 MS (Java/Others ...

  6. HDU - 6183 暴力,线段树动态开点,cdq分治

    B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...

  7. hdu 6183 Color it (线段树 动态开点)

    Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...

  8. HDU - 6183:Color it (线段树&动态开点||CDQ分治)

    Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...

  9. HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Tota ...

随机推荐

  1. R dataframe 遗忘, which 矩阵搜索

    A data frame is used for storing data tables. It is a list of vectors of equal length. For example, ...

  2. [存储过程]中的事务(rollback)回滚

    在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... del ...

  3. Python基础入门-While循环

    讲完了for循环我们继续来看第二个循环,那就是while循环,while循环和for循环虽然都是循环,但是有着本质的不同.我们先来看下她们之间的区别和联系: While循环和for循环区别: 1.fo ...

  4. URAL 1355. Bald Spot Revisited(数论)

    题目链接 题意 : 一个学生梦到自己在一条有很多酒吧的街上散步.他可以在每个酒吧喝一杯酒.所有的酒吧有一个正整数编号,这个人可以从n号酒吧走到编号能整除n的酒吧.现在他要从a号酒吧走到b号,请问最多能 ...

  5. 测试中常用到的linux命令

    1. man         格式化以及列出命令的(在线)操作手册.         使用方法                 man [ -options ] name       man man ...

  6. Glide4.0使用

    导入 dependencies { compile 'com.github.bumptech.glide:glide:4.0.0' compile 'com.android.support:suppo ...

  7. Android 单位dp和px之间相互转换

    public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context con ...

  8. c# 如何筛选datatable

    对DataTable数据各种筛选 筛选一个DataTable的数据,赋值给另外一个DataTable 假设: 有2个DataTable:DataTable A.DataTable B. 要求: 筛选D ...

  9. c# 对象反射赋值未知属性需类型转换

    反射某个类时,对于类的属性,字段.已知有已知的方法,未知有未知的写法. 而SetValues赋值则需要类型转换 情况1,该属性类型是已知类型,例如:int int value=500; propert ...

  10. c++实验2 顺序存储线性表

    线性表顺序存储 实现了动态数组的增删改查  前驱后继  A=AUB 动态数组右移 (1)顺序表存储结构的定义(类的声明): class SeqList { protected: DataType *l ...