码力不行啊。。。

错误记录:

171行后面对find2的使用错误,原来写的是p=find2(rt,p1),然后再加上一句能过样例但很假的特判

事实上,现在是要寻找最大的j,使得d2[1..j-1]=p1-1

而find2返回的是最大的j,使得d2[1..j]<=p1,因此要这么用

 #pragma GCC optimize("Ofast")
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
namespace S
{
const int N=;
int rand1()
{
static int x=;
return x=(48271LL*x+)%;
}
struct Node
{
Node *ch[],*fa;
int sz,d,r;
int d1,d2;ll sum;
}nds[N];
int gsz(Node *o) {return o?o->sz:;}
int gd1(Node *o) {return o?o->d1:;}
int gd2(Node *o) {return o?o->d2:;}
ll gsum(Node *o) {return o?o->sum:;}
void upd(Node *o)
{
o->sz=gsz(o->ch[])+gsz(o->ch[])+;
o->d1=gd1(o->ch[])+gd1(o->ch[])+(o->d>);
o->d2=gd2(o->ch[])+gd2(o->ch[])+(o->d<);
o->sum=ll(gsum(o->ch[]))+gsum(o->ch[])+o->d;
}
int mem;
Node *getnode()
{
Node *t=nds+(mem++);
t->ch[]=t->ch[]=t->fa=;
t->d1=t->d2=t->d=;t->sz=;t->r=rand1();
return t;
}
Node *merge(Node *a,Node *b)
{
if(!a) return b;
if(!b) return a;
if(a->r<b->r)
{
a->ch[]=merge(a->ch[],b);upd(a);
if(a->ch[]) a->ch[]->fa=a;
return a;
}
else
{
b->ch[]=merge(a,b->ch[]);upd(b);
if(b->ch[]) b->ch[]->fa=b;
return b;
}
}
typedef pair<Node*,Node*> pnn;
pnn split(Node *a,int k)
{
if(!a) return pnn(,);
if(!k) return pnn(,a);
int ls=gsz(a->ch[]);pnn y;
if(k<=ls)
{
//if(a->ch[0]) a->ch[0]->fa=0;
y=split(a->ch[],k);
a->ch[]=y.se;
if(a->ch[]) a->ch[]->fa=a;
upd(a);y.se=a;
}
else
{
//if(a->ch[1]) a->ch[1]->fa=0;
y=split(a->ch[],k-ls-);
a->ch[]=y.fi;
if(a->ch[]) a->ch[]->fa=a;
upd(a);y.fi=a;
}
return y;
}
void insert(Node *&a,int p,int x)
{
pnn t1=split(a,p-);Node *t=getnode();
t->d=x;upd(t);
a=merge(merge(t1.fi,t),t1.se);
}
void remove(Node *&a,int p)
{
pnn t1=split(a,p-),t2=split(t1.se,);
a=merge(t1.fi,t2.se);
}
int find1(Node *&a,int k)
{
pnn t1=split(a,k);int ans=t1.fi->d1;
a=merge(t1.fi,t1.se);
return ans;
}
int find2(Node *a,int k)
{
if(!a) return ;
int ls=gd2(a->ch[]);
if(k<ls) return find2(a->ch[],k);
else if(k<ls+(a->d<)) return gsz(a->ch[]);
else return gsz(a->ch[])++find2(a->ch[],k-ls-(a->d<));
}
int find3(Node *&a,int k)
{
pnn t1=split(a,k);int ans=t1.fi->d2;
a=merge(t1.fi,t1.se);
return ans;
}
ll qsum(Node *&a,int l,int r)
{if(l>r) swap(l,r);
pnn t1=split(a,l-),t2=split(t1.se,r-l+);
ll ans=t2.fi->sum;
a=merge(t1.fi,merge(t2.fi,t2.se));
return ans;
}
Node *rt;
Node *find(Node *a,int k)
{
if(!a) return ;
int ls=gsz(a->ch[]);
if(k<=ls) return find(a->ch[],k);
else if(k<=ls+) return a;
else return find(a->ch[],k-ls-);
}
bool gson(Node *a) {return a==a->fa->ch[];}
int findx(Node *a)
{
int ans=gsz(a->ch[])+;
for(;a!=rt;a=a->fa)
if(gson(a))
ans+=gsz(a->fa->ch[])+;
return ans;
}
}
set<int> s;
char tmp[];
int n;
using S::rt;
S::pnn ttt[];
int main()
{
int p,x,i,p1,TT=;
while(scanf("%d",&n)==)
{
S::mem=;
s.clear();rt=;
for(i=;i<=n;i++) s.insert(i);
++TT;
printf("Case #%d:\n",TT);
for(i=;i<=n;i++)
{
scanf("%s",tmp);
if(tmp[]=='i')
{
scanf("%d",&p);p++;
x=*s.begin();s.erase(x);
S::insert(rt,p,x);ttt[x].fi=S::find(rt,p);
//printf("a%d %d\n",p,x);
//printf("%d\n",S::findx(ttt[x].fi));
p1=S::find1(rt,p);p=S::find2(rt,p1-)+;
S::insert(rt,p,-x);ttt[x].se=S::find(rt,p);
//printf("a%d %d\n",p,-x);
}
else if(tmp[]=='r')
{
scanf("%d",&x);
//printf("b%d ",S::findx(ttt[x].fi));
S::remove(rt,S::findx(ttt[x].fi));
//printf("%d\n",S::findx(ttt[x].se));
S::remove(rt,S::findx(ttt[x].se));
s.insert(x);
}
else
{
scanf("%d",&x);
printf("%lld\n",S::qsum(rt,S::findx(ttt[x].fi),S::findx(ttt[x].se)));
}
}
}
return ;
}

Queue Sequence HDU - 4441的更多相关文章

  1. HDU 4441 Queue Sequence(优先队列+Treap树)(2012 Asia Tianjin Regional Contest)

    Problem Description There's a queue obeying the first in first out rule. Each time you can either pu ...

  2. Q - Play With Sequence HDU - 3971 线段树 重新排序建树

    Q - Play With Sequence HDU - 3971 这个题目是一个线段树,比较特别的线段树,就是c询问一定次数之后重新排序建树来优化减低复杂度. 第一次碰到这种题目有点迷. 这个题目写 ...

  3. HDU 4441 Queue Sequence(splay)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:一个数列,三种操作:(1)插入:找到没在当前数列中的最小的正整数i,将其插在位置p之后,并 ...

  4. HDU 4441 Queue Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:对于一个序列,每次有三种操作   insert pos  表示在pos插入一个数,这个数是最小的正数 ...

  5. DNA sequence HDU - 1560

    DNA sequence Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. (KMP 模板)Number Sequence -- Hdu -- 1711

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/Other ...

  7. (模拟)Arithmetic Sequence -- HDU -- 5400

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5400 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  8. Number Sequence HDU - 5014

    There is a special number sequence which has n+1 integers. For each number in sequence, we have two ...

  9. AC日记——Number Sequence hdu 1711

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. 【php】读取&quot;文件列表&quot;按时间倒序显示,并递归显示各层文件夹、!

    思路: 1.读取该php所在文件夹的文件列表,用"改动时间.文件名称"做键值对,塞入数组.对"改动时间"倒序.(貌似不能直接按时间倒序读取文件列表,此处为间接方 ...

  2. 查询历史使用过的命令并使用(history)

    一.什么是history 在bash功能中.它能记忆使用过的命令,这个功能最大的优点就是能够查询以前做过的举动.从而能够知道你的执行步骤.那么就能够追踪你曾下达过的命令.以作为除错的工具. 二.His ...

  3. Java 内存区域与内存溢出异常

    一.Java虚拟机内存划分 1.程序计数器 线程私有 可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令. Java虚拟机是通过多 ...

  4. luogu3379 【模板】最近公共祖先(LCA) 倍增法

    题目大意:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 整体步骤:1.使两个点深度相同:2.使两个点相同. 这两个步骤都可用倍增法进行优化.定义每个节点的Elder[i]为该节点的2^k( ...

  5. ICMP协议 广播以查询局域网内的所有主机

    看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具.前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很 ...

  6. filename extension

    题目描述 Please create a function to extract the filename extension from the given path,return the extra ...

  7. yum下载对应内核版本的kernel-devel

    1 查看内核版本 uname -r 2 查看目前已有的kernel-devel uname -a ; rpm -qa kernel\* | sort 3 下载对应版本 $ sudo yum insta ...

  8. Hihocoder #1098 : 最小生成树二·Kruskal算法 ( *【模板】 )

    #1098 : 最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用 ...

  9. 关于JQuery获取元素索引值的理解

    举例: <html> <body> <div id="text"> <div> <a><span>标题一&l ...

  10. I.MX6 AW-NB177NF p2p support

    /***************************************************************************** * I.MX6 AW-NB177NF p2 ...