bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化
1511: [POI2006]OKR-Periods of Words
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 351 Solved: 220
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
babababa
Sample Output
- #include<cstring>
- #include<cmath>
- #include<cstdio>
- #include<algorithm>
- #include<iostream>
- #define N 3007
- #define Wb putchar(' ')
- #define We putchar('\n')
- #define rg register int
- using namespace std;
- inline int read()
- {
- int x=,f=;char ch=getchar();
- while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
- while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
- return x*f;
- }
- inline void write(int x)
- {
- if(x<) putchar('-'),x=-x;
- if (x==) putchar();
- int num=;char c[];
- while(x) c[++num]=(x%)+,x/=;
- while(num) putchar(c[num--]);
- }
- int D,S,n;
- int ql,qr,qd,qu;
- #define ls p<<1
- #define rs p<<1|1
- struct segx
- {
- int v[N],tag[N];
- void change(int p,int l,int r,int x,int y,int z)
- {
- v[p]=max(v[p],z);
- if (l==x&&y==r){tag[p]=max(tag[p],z);return;}
- int mid=(l+r)>>;
- if (y<=mid) change(ls,l,mid,x,y,z);
- else if (x>mid) change(rs,mid+,r,x,y,z);
- else change(ls,l,mid,x,mid,z),change(rs,mid+,r,mid+,y,z);
- }
- int query(int p,int l,int r,int x,int y)
- {
- if (l==x&&y==r) return v[p];
- int mid=(l+r)>>,res=tag[p];
- if (y<=mid) res=max(res,query(ls,l,mid,x,y));
- else if (x>mid) res=max(res,query(rs,mid+,r,x,y));
- else res=max(res,max(query(ls,l,mid,x,mid),query(rs,mid+,r,mid+,y)));
- return res;
- }
- };
- struct segy
- {
- segx v[N],tag[N];
- void change(int p,int l,int r,int x,int y,int z)
- {
- v[p].change(,,S,qd,qu,z);
- if (l==x&&y==r){tag[p].change(,,S,qd,qu,z);return;}
- int mid=(l+r)>>;
- if (y<=mid) change(ls,l,mid,x,y,z);
- else if (x>mid) change(rs,mid+,r,x,y,z);
- else change(ls,l,mid,x,mid,z),change(rs,mid+,r,mid+,y,z);
- }
- int query(int p,int l,int r,int x,int y)
- {
- if (l==x&&y==r) return v[p].query(,,S,qd,qu);
- int mid=(l+r)>>,res=tag[p].query(,,S,qd,qu);
- if (y<=mid) res=max(res,query(ls,l,mid,x,y));
- else if (x>mid) res=max(res,query(rs,mid+,r,x,y));
- else res=max(res,max(query(ls,l,mid,x,mid),query(rs,mid+,r,mid+,y)));
- return res;
- }
- }T;
- #undef ls
- #undef rs
- int main()
- {
- D=read(),S=read(),n=read();
- rg d,s,w,x,y;
- for (rg i=;i<=n;i++)
- {
- d=read(),s=read(),w=read(),x=read(),y=read();
- ql=x+,qr=x+d,qd=y+,qu=y+s;
- int ans=T.query(,,D,ql,qr);
- T.change(,,D,ql,qr,ans+w);
- }
- qd=,qu=S;
- write(T.query(,,D,,D));
- }
bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化的更多相关文章
- 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)
题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标 ...
- BZOJ4785 [Zjoi2017]树状数组 【二维线段树 + 标记永久化】
题目链接 BZOJ4785 题解 肝了一个下午QAQ没写过二维线段树还是很难受 首先题目中的树状数组实际维护的是后缀和,这一点凭分析或经验或手模观察可以得出 在\(\mod 2\)意义下,我们实际求出 ...
- 洛谷 P3688 - [ZJOI2017]树状数组(二维线段树+标记永久化)
题面传送门 首先学过树状数组的应该都知道,将树状数组方向写反等价于前缀和 \(\to\) 后缀和,因此题目中伪代码的区间求和实质上是 \(sum[l-1...n]-sum[r...n]=sum[l-1 ...
- 【BZOJ1513】[POI2006]Tet-Tetris 3D 二维线段树
[BZOJ1513][POI2006]Tet-Tetris 3D Description Task: Tetris 3D "Tetris" 游戏的作者决定做一个新的游戏, 一个三维 ...
- 洛谷.3437.[POI2006]TET-Tetris 3D(二维线段树)
题目链接 下落一个d*s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵 ...
- BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树
题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ...
- BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...
- BZOJ 3489 A simple rmq problem 可持久化KDtree/二维线段树
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3489 题意概述: 给出一个序列,每次询问一个序列区间中仅出现了一次的数字最大是多少,如果 ...
- [BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)
4785: [Zjoi2017]树状数组 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 297 Solved: 195[Submit][Status ...
随机推荐
- K-近邻算法入门
K-近邻算法的直观理解就是:给定一个训练集合,对于新的实例,在训练集合中找到k个与该实例最近的邻居,然后根据“少数服从多数”原则判断该实例归属于哪一类,又称“随大流” K-近邻算法的三大要素:K值得选 ...
- 【Pthon入门学习】99乘法表
学习知识点: 1. string.join(seq): 以string字符串作为分隔符,将seq的所有元素拼接成一个新的字符串 s = ['%d * %d = %d' % (y, 4, 4*y) fo ...
- python实现lower_bound和upper_bound
由于对于二分法一直都不是很熟悉,这里就用C++中的lower_bound和upper_bound练练手.这里用python实现 lower_bound和upper_bound本质上用的就是二分法,lo ...
- Python最简编码规范
前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...
- 如何计算FOB价格
FOB价格是国际贸易术语常有的一种算法,针对不同的对象,FOB价格也有不一样的算法.对于做外贸生意的朋友,需要了解FOB价格以及各项费用名称,以及如何计算FOB价格. FOB价格是国际FOB价格语常有 ...
- 第八次ScrumMeeting博客
第八次ScrumMeeting博客 本次会议于11月2日(四)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的 ...
- Pythagorean Triples毕达哥斯拉三角(数学思维+构造)
Description Katya studies in a fifth grade. Recently her class studied right triangles and the Pytha ...
- python struct详解
转载:https://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 有的时候需要用python处理二进制数据,比如,存取文件,socket操 ...
- MacBook Pro 15寸常见问题及修复
苹果MacBook Pro更换SSD硬盘攻略教程 MacBook pro开机黑屏解决 苹果电脑 MAC PRO 开机黑屏了 MacBook Pro 开机后黑屏,怎么办啊 如果 Mac 无法开机 Mac ...
- 跨域写cookie
假设a站想往b站写cookie,那么目前有两种方案,参考如下: 第一种(使用jsonp): a站js代码如下: $.ajax({ url: 'http://www.b.com/jsonp.jsp?do ...