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栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- RTL8188EUS之MAC地址烧写(使用利尔达模组)
1. 手上有几个RTL8188EUS的wifi模块,打算把台式机装个无线网卡,但是插上之后发现没有MAC,没办法只能自己去找个烧写MAC的软件.RTL8188内部有个eFuse,用来配置之类的.这个e ...
- unity面试题一
一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中 ...
- C# 组装XML传给webserver+XML 返回获取多个xml,根据多个XML 返回dataset类型
大致流程介绍: 传值给 webserver+XML ,得到webserver+XML多个返回值,组装成dataset形式返回 首先创建所需要的类型 DataSet ds = new DataSet() ...
- Objective-C Block数据类型 @protocol关键字
Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合 ...
- 【jmeter进阶之逻辑控制器】
jmeter进阶之逻辑控制器 转载 https://www.cnblogs.com/malinalian/p/10491946.html 常用的逻辑控制器 1,循环控制器:可以设置该控制器内 ...
- pthon web框架flask(一)
pthon web框架优劣: 知乎上有一个讨论Python 有哪些好的 Web 框架?,从这个讨论中最后我选择了flask,原因是: Django,流行但是笨重,还麻烦,人生苦短,肯定不选 web.p ...
- 变量不加 var 声明——掉进坑中,无法自拔!
整整一下午,都在解决 window.onresize 中方法丢失不执行的问题!姿势固定在电脑前,颈椎病都犯了. 前些日子与大家分享了一下关于 防止jquery $(window).resize()多次 ...
- Python入门(5)
导览: 函数 集合 迭代器与生成器 模块 一.函数 只要学过其他编程语言应该对函数不太陌生,函数在面向过程的编程语言中占据了极重要的地位,可以说没有函数,就没有面向过程编程,而在面向对象语言中,对象的 ...
- vue 与jq 的对比
vue.react和angular,众所周知,他们是前端框架的3个大佬.这篇主要想对比一下用vue和用jq的区别,至于和其他框架的对比,我想vue的官网说的更为详细. 我算是独自用vue写过一个小型项 ...
- apache访问403错误
1.排查selinux 2.目录权限 3.WEB主目录是否正确