将此神题作为博客园的第一篇文章,至此,数据结构基本学完了(或者说数据结构轮流虐了我一次!)

人生第一道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的更多相关文章

  1. BZOJ 3217: ALOEXT (块状链表套trie)

    第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆- 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直 ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. 利尔达仿真器加有人CC3200模块USR-C322上电测试

    1. 使用利尔达的CC3200底板仿真器对有人CC3200模块USR-C322进行烧写,测试. 2. 连接的接口,需要连接6根线,如下,供电测试,第一波测试,输入+++回复a,然后在输入a,返回+OK ...

  2. 转:asp.net mvc ef 性能监控调试工具 MiniProfiler

    MiniProfiler官网:http://miniprofiler.com/ MiniProfiler的一个特别有用的功能是它与数据库框架的集成.除了.NET原生的 DbConnection类,Mi ...

  3. MVC下的Area区域知识点

    新建area区域 1.如果与根目录下的url相同,那么需要在RouteConfig.cs中 public static void RegisterRoutes(RouteCollection rout ...

  4. Bootstrap基础篇—常见的CSS类

    一.标题 标签 大小 h1 36px h2 30px h3 24px h4 18px h5 14px h6 12px 二.常见的内联样式 标签 用途 del 删除的文本 s 无用的文本 ins 插入的 ...

  5. 「专题训练」Machine Schedule(HDU-1150)

    题意 在一个工厂,有两台机器\(A, B\)生产产品.\(A\)机器有\(n\)种工作模式(模式\(0\),模式\(1\)--模式\(n-1\)).\(B\)机器有\(m\)种工作模式(模式\(0\) ...

  6. http知识点 前端

    前端必须明白的http知识点 对于http的报文格式就不多细说了,做为前端开发,我们需要知道前后端联调时的请求和响应之间请求头和返回头之间的关系和每个字段中的涵意,静态文件资源在加载时我们所观察到可性 ...

  7. PyCharm添加Selenium与Appium类库

    PyCharm添加Selenium与Appium依赖, 不需要用pip去安装!

  8. cookie的介绍和自动化中cookie的操作

    1 cookie是什么? cookie: 1. Cookie是一小段的文本信息:格式:python中的字典(键值对组成) 2. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客 ...

  9. 三个线程ABC,交替打印ABC

    转载与:https://www.cnblogs.com/x_wukong/p/4009709.html 创建3个线程,让其交替打印ABC . 输出如下:  ABCABCABCABC. 方法:使用syn ...

  10. 【20180807模拟测试】t1 function

    low逼的我也只能写这样的水题... 题面 对于一个整数,定义 f(x)为他的每个数位的阶乘的乘积.例如 f(135)=1! * 3! * 5! =720.给出一个数 a(可以包含前缀零),a 满足他 ...