BZOJ4527: K-D-Sequence 线段树
别人家的题解。
#include<bits/stdc++.h> #define N 200005 #define M (l+r>>1) #define P (k<<1) #define S (k<<1|1) #define K l,r,k #define L l,M,P #define R M+1,r,S #define Z \ int l=0,int r=n-1,int k=1 using namespace std; int n,z,d; typedef int seg[N<<2]; seg s[2],t[2],e; void apply(int i,int d,Z){ s[i][k]=d; t[i][k]=d+l; e[k]=d+t[i^1][k]; } void devolve(Z){ for(int i=0;i!=2;++i) if(s[i][k]!=INT_MIN){ apply(i,s[i][k],L); apply(i,s[i][k],R); s[i][k]=INT_MIN; } } void update(int k){ for(int i=0;i!=2;++i) t[i][k]=min( t[i][P],t[i][S]); e[k]=min(e[P],e[S]); } void change( int i,int d,int s,int t,Z){ if(s==l&&t==r) apply(i,d,K); else{ devolve(K); if(t<=M) change(i,d,s,t,L); else if(s>M) change(i,d,s,t,R); else{ change(i,d,s,M,L); change(i,d,M+1,t,R); } update(k); } } int query(int s,int t,Z){ static int d; return s==l&&t==r &&e[k]>z?-1:l==r?l :(devolve(K), t<=M?query(s,t,L) :s>M?query(s,t,R) :~(d=query(s,M,L)) ?d:query(M+1,t,R)); } typedef int ds[N]; ds f,a,q,u,v,p; typedef pair<int,int> vec; vec b; void foo(){ int s=*min_element(a,a+n); for(int i=0;i!=n;++i) a[i]-=s; set<int> t; for(int i=0,j=0;i!=n;++i){ while(t.count(a[i]) ||a[i]%d!=a[j]%d) t.erase(a[j++]); f[i]=j; t.insert(a[i]); } for(int i=0,j=0,k=0; k!=n;++k,++z){ a[u[i+1]=k]/=d; while(i&&a[p[i]]>a[k]) --i; p[++i]=v[j+1]=k; change(0,-a[k],u[i],k); while(j&&a[q[j]]<a[k]) --j; q[++j]=k; change(1,a[k],v[j],k); int s=query(f[k],k); b=max(b,vec(k-s+1,-s)); } } void bar(){ for(int i=0;i!=n;++i){ int j=i; while(i+1!=n&&a[i]==a[i+1]) ++i; b=max(b,vec(i-j+1,-j)); } } int main(){ scanf("%d%d%d",&n,&z,&d); for(int i=0;i!=n;++i) scanf("%d",a+i); (d?foo:bar)(); printf("%d %d\n",1-b.second, b.first-b.second); }
BZOJ4527: K-D-Sequence 线段树的更多相关文章
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- Wow! Such Sequence!(线段树4893)
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- hdu4893Wow! Such Sequence! (线段树)
Problem Description Recently, Doge got a funny birthday present from his new friend, Protein Tiger f ...
- HDU 6047 Maximum Sequence(线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- Codeforces 438D The Child and Sequence - 线段树
At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...
- hdu 4893 Wow! Such Sequence!(线段树)
题目链接:hdu 4983 Wow! Such Sequence! 题目大意:就是三种操作 1 k d, 改动k的为值添加d 2 l r, 查询l到r的区间和 3 l r. 间l到r区间上的所以数变成 ...
- hdu-5805 NanoApe Loves Sequence(线段树+概率期望)
题目链接: NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 ...
- Codeforces 486E LIS of Sequence(线段树+LIS)
题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间求和+点修改+区间取模
D. The Child and Sequence At the children's day, the child came to Picks's house, and messed his h ...
随机推荐
- iOS--更新cooped库
- PHP 文件创建/写入
<?php /* PHP 文件创建/写入 fopen() 函数也用于创建文件.也许有点混乱, 但是在 PHP 中,创建文件所用的函数与打开文件的相同. 如果您用 fopen() 打开并不存在的文 ...
- JNI系列——C文件中的方法调用Java中方法
1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3. ...
- plsql解决中文乱码以及问号问题
PLSQL执行sql语句,不识别中文,输出的中文标题显示成问号???? 输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 设置 ...
- Ceph浅析”系列之四——Ceph的结构
本文将从逻辑结构的角度对Ceph进行分析. Ceph系统的层次结构 Ceph存储系统的逻辑层次结构如下图所示[1]. Ceph系统逻辑层次结构 自下向上,可以将Ceph系统分为四个层次: (1)基础存 ...
- userAgent收集
UserAgent AppleWebKit,Gecko,Trident,Presto http://www.httpuseragent.org/list/ 谷歌:360? Mozilla/5.0 (W ...
- hdu4549 矩阵快速幂 + 欧拉降幂
R - M斐波那契数列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- Spring Security3学习实例
Spring Security是什么? Spring Security,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理 ...
- js-回车事件控制
1.文本框回车时间 < script type = "text/javascript" language = "javascript" > fun ...
- c#如何使输入数据类型限制,C#如何添加限制
验证n位的数字:^\d{n}$ ,例如要输6位数字,不能多也不能少: ^\d{6}$ 验证数字的正则表达式集 验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$ ...