bzoj 3217: ALOEXT
将此神题作为博客园的第一篇文章,至此,数据结构基本学完了(或者说数据结构轮流虐了我一次!)
人生第一道7K代码题!
没什么,就是treap套个trie,然后tle是因为一定要用指针当时p党谁会用那么丑的指针,所以作罢。然后光荣tle(用自己的数据和云神的对拍是没有错的),然后竟然是第一个尝试写此题的p党!
好吧。oi路也算是步入正轨(虽然一开始就必须走在翻盘的路上……noip就不想说了……),那么接下来就重新回归基础,把图论那些东西重新搞好♂搞深♂入♂……
然后来看看3217第一个死掉的p党的代码吧(语言歧视题!)
好多个第一!
const
maxd=;
maxn1=;
maxn2=;
number=;
mm=; var
son:array[..maxn1,..]of longint;
sum,pp:array[..maxn1]of longint;
size,root,left,right,p1,p2,value,fi,se,key:array[..maxn2]of longint;
tot,tot1,tot2,sum1,sum2,n,m,sroot,big1,big2:longint; function new1:longint;
begin
inc(tot);
exit(tot);
end; function new2:longint;
var
i:longint;
begin
if sum1> then begin
i:=pp[sum1];
dec(sum1);
sum[i]:=;
son[i][]:=;
son[i][]:=;
exit(i);
end;
inc(sum2);
exit(sum2);
end; procedure clear(x:longint);
begin
if x= then exit;
inc(sum1);
pp[sum1]:=x;
clear(son[x][]);
clear(son[x][]);
end; function max(x,y:longint):longint;
begin
if x<y then exit(y);
exit(x);
end; procedure swap(var x,y:longint);
var
i:longint;
begin
i:=x;
x:=y;
y:=i;
end; function ask(x,y:longint):longint;
var
ans,i,j:longint;
begin
ans:=;
for i:=maxd downto do begin
if x= then break;
j:=y>>i and ;
if sum[son[x][j xor ]]> then begin
inc(ans,<<i);
j:=j xor ;
end;
x:=son[x][j];
end;
exit(ans);
end; procedure add(var x:longint;y:longint);
var
i,j,t:longint;
begin
if x= then x:=new2;
t:=x;
for i:=maxd downto - do begin
inc(sum[t]);
if i=- then exit;
j:=y>>i and ;
if son[t][j]= then son[t][j]:=new2;
t:=son[t][j];
end;
end; procedure del(var x:longint;h,y:longint);
begin
dec(sum[x]);
if sum[x]= then begin
clear(x);
x:=;
exit;
end;
if h=- then exit;
del(son[x][y>>h and ],h-,y);
end; procedure calc(var x,y:longint;z:longint);
begin
if z>y then begin
if z>x then begin
y:=x;
x:=z;
end
else y:=z;
end;
end; procedure merge(var x:longint;ll,rr:longint);
begin
x:=new2;
sum[x]:=sum[ll]+sum[rr];
if sum[son[ll][]]+sum[son[rr][]]> then merge(son[x][],son[ll][],son[rr][]);
if sum[son[ll][]]+sum[son[rr][]]> then merge(son[x][],son[ll][],son[rr][]);
end; procedure up(x:longint);
begin
if x= then exit;
fi[x]:=fi[left[x]];
se[x]:=se[left[x]];
calc(fi[x],se[x],value[x]);
calc(fi[x],se[x],fi[right[x]]);
calc(fi[x],se[x],se[right[x]]);
size[x]:=size[left[x]]+size[right[x]]+;
end; procedure update(x:longint);
begin
merge(root[x],root[left[x]],root[right[x]]);
add(root[x],value[x]);
up(x);
end; procedure lt(var x:longint);
var
k:longint;
begin
k:=right[x];
right[x]:=left[k];
left[k]:=x;
size[k]:=size[x];
fi[k]:=fi[x];
se[k]:=se[x];
clear(root[k]);
root[k]:=root[x];
update(x);
x:=k;
end; procedure rt(var x:longint);
var
k:longint;
begin
k:=left[x];
left[x]:=right[k];
right[k]:=x;
size[k]:=size[x];
fi[k]:=fi[x];
se[k]:=se[x];
clear(root[k]);
root[k]:=root[x];
update(x);
x:=k;
end; procedure insert(var x:longint;y,z:longint);
begin
if x= then begin
x:=new1;
value[x]:=z;
key[x]:=random(number);
left[x]:=;
right[x]:=;
add(root[x],z);
fi[x]:=z;
se[x]:=;
size[x]:=;
exit;
end;
if y<=size[left[x]]+ then begin
insert(left[x],y,z);
if key[left[x]]>key[x] then rt(x);
end
else begin
insert(right[x],y-size[left[x]]-,z);
if key[right[x]]>key[x] then lt(x);
end;
add(root[x],z);
inc(size[x]);
calc(fi[x],se[x],z);
end; function change(x,y,new:longint):longint;
var
old:longint;
begin
if y=size[left[x]]+ then begin
old:=value[x];
del(root[x],maxd,old);
add(root[x],new);
value[x]:=new;
up(x);
exit(old);
end;
if y<=size[left[x]] then old:=change(left[x],y,new)
else old:=change(right[x],y-size[left[x]]-,new);
del(root[x],maxd,old);
add(root[x],new);
up(x);
exit(old);
end; function find(x,y:longint):longint;
begin
if y=size[left[x]]+ then exit(value[x]);
if y<=size[left[x]] then exit(find(left[x],y))
else exit(find(right[x],y-size[left[x]]-));
end; function delete(var x:longint;y:longint):longint;
var
old:longint;
begin
if y=size[left[x]]+ then begin
old:=value[x];
if left[x]= then x:=right[x]
else
if right[x]= then x:=left[x]
else begin
if key[left[x]]>key[right[x]] then begin
rt(x);
delete(right[x],y-size[left[x]]-);
end
else begin
lt(x);
delete(left[x],y);
end;
del(root[x],maxd,old);
end;
up(x);
exit(old);
end;
if y<=size[left[x]] then old:=delete(left[x],y)
else old:=delete(right[x],y-size[left[x]]-);
del(root[x],maxd,old);
up(x);
exit(old);
end; procedure before(x,l,r:longint);
var
lsum:longint;
begin
if x= then exit;
lsum:=size[left[x]]+;
if r<lsum then before(left[x],l,r)
else
if l>lsum then before(right[x],l-lsum,r-lsum)
else
if (l=) and (r=size[x]) then begin
inc(tot1);
p1[tot1]:=x;
calc(big1,big2,fi[x]);
calc(big1,big2,se[x]);
end
else begin
inc(tot2);
p2[tot2]:=value[x];
calc(big1,big2,value[x]);
if l<lsum then before(left[x],l,lsum-);
if r>lsum then before(right[x],,r-lsum);
end;
end; function query(l,r:longint):longint;
var
ll,rr,mid,ans,i:longint;
begin
tot1:=;
tot2:=;
big1:=;
big2:=;
before(sroot,l,r);
ans:=;
//writeln(big2);
if big2= then exit();
for i:= to tot1 do p1[i]:=root[p1[i]];
for i:= to tot1 do ans:=max(ans,ask(p1[i],big2));
for i:= to tot2 do ans:=max(ans,p2[i] xor big2);
exit(ans);
end; procedure into;
var
i,j:longint;
begin
//randomize;
readln(n,m);
tot:=;
sroot:=;
for i:= to n do begin
read(j);
insert(sroot,i,j);
end;
end; procedure work;
var
last,x,y:longint;
ch:char;
begin
last:=;
readln;
while m> do begin
dec(m);
read(ch);
case ch of
'I':begin
readln(x,y);
//x:=x mod n+;
x:=(x+last mod n) mod n+;
y:=(y+last mod mm) mod mm;
//writeln(x,' ',y);
insert(sroot,x,y);
inc(n);
end;
'C':begin
readln(x,y);
//x:=x mod n+;
x:=(x+last mod n) mod n+;
y:=(y+last mod mm) mod mm;
//writeln(x,' ',y);
change(sroot,x,y);
end;
'D':begin
readln(x);
//x:=x mod n+;
x:=(x+last mod n) mod n+;
//writeln(x);
delete(sroot,x);
dec(n);
end;
'F':begin
readln(x,y);
//x:=x mod n+;
//y:=y mod n+;
x:=(x+last mod n) mod n+;
y:=(y+last mod n) mod n+;
if x>y then swap(x,y);
//writeln(x,' ',y);
last:=query(x,y);
writeln(last);
end;
end;
end;
end; begin
into;
work;
end.
14.12.13……竟然没发现云神比较神奇的build操作(之前还以为慢了呢!)
procedure build(var x:longint;ll,rr:longint);
var
mid,i:longint;
begin
mid:=(ll+rr)>>;
x:=mid;
value[x]:=num[mid];
key[x]:=random(number);
left[x]:=;
right[x]:=;
if ll<mid then begin
build(left[x],ll,mid-);
if key[left[x]]>key[x] then swap(key[left[x]],key[x]);
end;
if rr>mid then begin
build(right[x],mid+,rr);
if key[right[x]]>key[x] then swap(key[right[x]],key[x]);
end;
update(x)
end;
结果还是tle……(搞到数据了……云14s蒟蒻18s……)
bzoj 3217: ALOEXT的更多相关文章
- BZOJ 3217: ALOEXT (块状链表套trie)
第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆- 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- Android远程推送笔记
Android远程推送笔记 Android推送有很多种实现方案,但都没办法和苹果的APNS比拟,这里主要来讲述一下我遇到的问题,和作出的抉择. 首先,为了快速接入,所以就没有自己搭建推送服务器,而是使 ...
- CentOS 5/6上安装EPEL源
转自:http://www.vckai.com/p/25 EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fe ...
- 抽样分布(2) t分布
定义 t分布 设X ~ N(0,1),Y ~ χ2(n),且X,Y相互独立,则称随机变量 服从自由度为n的t分布(学生氏分布) 记为 t~t(n),其概率密度为 由于tn(x)是偶函数,其图形关于y轴 ...
- Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session
第2章--Cookie与Session Cookie与Session 浏览器输入地址--HTTP请求--Servlet--HTTP响应--浏览器接收 会话(session):打开浏览器,打开一系列页面 ...
- (原)HUD绘画贴图解析
@小道:临时存放 1\主过程 说明: a\调用DrawTextureSimple时,会将UTexure封装成CavarsItem, 若是正交投射函数执行双,最后CavarsItem.Dra ...
- redis 面试
Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog.G ...
- python3中使用python2中cmp函数出现错误
在python2中我们经常会使用cmp函数来比较一些东西,但是在python3中,你再来使用这个函数的时候,发现就报错了,提示找不到这个函数,这是为啥呢? 答:新版的python已经舍弃这种用法 而在 ...
- 创新手机游戏《3L》开发点滴(1)——道具、物品、装备表设计
一.游戏物品/道具系统数据模型设计特点 为了让游戏更加的丰富,我们1201团队的新手机游戏设计了道具系统.于是丰富了游戏.取悦了玩家,哭了开发——道具/物品数据子系统是简单的.复杂的.不确定的: 简单 ...
- 【转】Backbone.js学习笔记(一)
文章转自: http://segmentfault.com/a/1190000002386651 基本概念 前言 昨天开始学Backbone.js,写篇笔记记录一下吧,一直对MVC模式挺好奇的,也对j ...
- 软件工程 作业part1 自我介绍
自我介绍 老师您好,我叫宋雨,本科在长春理工大学,专业是计算机科学与技术. 1.回想一下你曾经对计算机专业的畅想:当初你是如何做出选择计算机专业的决定?你认为过去接触的课程是否符合你对计算机专业的期待 ...