noipd2t3列队
吉老师的题还真是难呢...
正解至今不会,只会平衡树的做法
这种用平衡树上一个点表示一段区间的题还真要做做...想起来挺难受的
建n棵平衡树表示每行的m-1个元素
再建一棵平衡树维护最后一列
中间要支持一个split操作,就是把[l,r]分成[l,x-1],x,[x+1,r]三部分,很好做
相比于bzoj上的诸多神题,这题细节不多,写起来轻松加愉快
这题要tmd动态开节点!!!一个点可以表示一段!!!查询的时候还不一定查到什么鬼地方!!!
还是Naive啊,noip前刚学完平衡树,考场上竟然不会做
这回也算是填了坑吧
Sylvia一点都不可爱
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#define ll long long
#include<queue>
using namespace std;
const int maxn=3e6+;
#define l(x) son[x][0]
#define r(x) son[x][1]
int Size;
int son[maxn][],fa[maxn];
ll size[maxn],lef[maxn],rig[maxn];
struct SplayTree
{
int rt;
inline void pushup(int id){size[id]=size[l(id)]+size[r(id)]++rig[id]-lef[id];}
inline void rotate(int x,int &k)
{
int y=fa[x],z=fa[y],L,R;
L=(r(y)==x);R=L^;
if(y==k)k=x;
else son[z][son[z][]==y]=x;
fa[son[x][R]]=y;fa[y]=x;fa[x]=z;
son[y][L]=son[x][R];son[x][R]=y;
pushup(y);pushup(x);
}
inline void Splay(int x,int &k)
{
while(x!=k)
{
int y=fa[x],z=fa[y];
if(y!=k)
{
if(son[y][]==x^son[z][]==y)rotate(x,k);
else rotate(y,k);
}
rotate(x,k);
}
pushup(x);
}
inline int getpos()
{
int x=rt;
for(;son[x][];x=son[x][]);
return x;
}
inline int addnode(ll L,ll R)
{
lef[++Size]=L;rig[Size]=R;size[Size]=R-L+;
return Size;
}
inline void addval(ll v)
{
int now=addnode(v,v);
int pos=getpos();
son[pos][]=now;fa[now]=pos;
Splay(now,rt);
}
inline int getpre(int x)
{
int now=son[x][];
for(;son[now][];now=son[now][]);
return now;
}
inline int getnex(int x)
{
int now=son[x][];
for(;son[now][];now=son[now][]);
return now;
}
inline ll split(int now,ll k)
{
Splay(now,rt);
k=k+lef[now]-;
int tmp=addnode(k+,rig[now]);
rig[now]=k-;
if(!son[now][])
{
son[now][]=tmp;
fa[tmp]=now;
}
else
{
int pos=getnex(now);
son[pos][]=tmp;fa[tmp]=pos;
Splay(tmp,rt);
}
return k;
}
inline ll query(ll x)
{
int now=rt;ll len;
while()
{
if(x<=size[son[now][]])now=son[now][];
else
{
x-=size[son[now][]];
len=rig[now]-lef[now]+;
if(x<=len)
{
if(x==)
{
ll res=lef[now];
lef[now]++;
Splay(now,rt);
pushup(now);
return res;
}
if(x==len)
{
ll res=rig[now];
rig[now]--;
Splay(now,rt);
pushup(now);
return res;
}
else return split(now,x);
}
x=x-(rig[now]-lef[now]+);
now=son[now][];
}
}
}
inline void init(ll L,ll R){rt=addnode(L,R);}
}Phalanx[maxn];
ll n,m,q;
void DynaOpen()
{
for(int i=;i<=n;i++)Phalanx[i].init(m*(i-)+,i*m-);
Phalanx[].init(m,m);
for(int i=;i<=n;i++)Phalanx[].addval(i*m);
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&q);
DynaOpen();
int x,y;ll va;
while(q--)
{
scanf("%d%d",&x,&y);
if(y==m)
{
printf("%lld\n",va=Phalanx[].query(x));
Phalanx[].addval(va);
}
else
{
printf("%lld\n",va=Phalanx[x].query(y));
Phalanx[x].addval(Phalanx[].query(x));
Phalanx[].addval(va);
}
}
}
noipd2t3列队的更多相关文章
- 关于PHP堆栈与列队
在PHP中数组常被当作堆栈(后进先出:LIFO)与队列(先进先出:FIFO)结构来使用.PHP提供了一组函数可以用于push与pop(堆栈)还有shift与unshift(队列)来操作数组元素.堆栈与 ...
- 在PHP中如何使用消息列队
/** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ...
- BZOJ2720: [Violet 5]列队春游
2720: [Violet 5]列队春游 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 173 Solved: 125[Submit][Status] ...
- [NOIp 2017]列队
Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有$n \times m$名学生, ...
- NOIP2017D2T3 列队—Treap
NOIP2017列队 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m ...
- P2649 - 【NOIP2017】列队
Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 ...
- WebForm应用log4net记录错误日志——使用线程列队写入
我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- [NOIP]2017列队——旋转treap/非旋转treap
Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m. 为了便 ...
随机推荐
- 2820: YY的GCD
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1693 Solved: 901[Submit][Status][Discu ...
- 九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:118 解决:54 题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N( ...
- PhotoKit type类型
参考链接: https://www.jianshu.com/p/42e5d2f75452/ 1.获取图像类型 enum PHAssetCollectionType : Int { case Album ...
- Django 认证系统 cookie & session & auth模块
概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...
- 程序运行之ELF文件结构
ELF目标文件格式的最前部是ELF文件头.包含了整个文件的基本属性.比如ELF文件版本,目标机器型号,程序入口地址等.然后是ELF的各个段,其中ELF文件中与段有关的重要结构就是段表.段表描述了ELF ...
- Symfony3 查询搜索功能DQL语句like查询
//前台页面代码 <form method="GET" action="{{ path('staff_index') }}" name="sea ...
- 如何在JSTL中获取数组或者list对象的索引值(index)
<c:forEach items="${productList}" var="products" varStatus="status" ...
- spring 3.2 后 annotation-driven 注册新的类
DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时! DefaultAnnotationHandlerMa ...
- 使用django开发一个博客
环境: MAC 10.10.5 Yosemite Python 3.73 Django 代码托管 github
- Python中PIL及Opencv转化
转载:http://blog.sina.com.cn/s/blog_80ce3a550102w26x.html Convert between Python tuple and list a = (1 ...