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. 为了便 ...
随机推荐
- [Android] 拍照、截图、保存并显示在ImageView控件中
近期在做Android的项目,当中部分涉及到图像处理的内容.这里先讲述怎样调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法. PS:作者购买 ...
- 如何在iOS中使用libxml
本文转载至 http://blog.csdn.net/cloudhsu/article/details/8087628 1. 选择xcode工程设定 2. 选择target 3. 选择Summary ...
- css3中font-face属性的用法详解
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...
- 服务器buff管理
关于buff和玩家自动回血buff { m_StatusTimer.reset(pFT->createTimer()); m_StatusTimer->setInterval(); m_S ...
- vptr
#include <stdio.h> class Point3d { public: virtual ~Point3d(){} public: static Point3d origin; ...
- iOS11 push控制器tabbar上移问题
解决方法 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { // 如果有大 ...
- effect request
from bs4 import BeautifulSoup import os filepath = 'D:\\pymine\\clean\\spider_map\\baidu_map_html_fi ...
- 【python】-- web开发之DOM
DOM 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是, ...
- unity里standard pbr(一)
关注forwardbase下的 standard.shader #pragma vertex vertBase #pragma fragment fragBase #include "Uni ...
- SpringMVC的第一个入门案例
用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示. 第一步:导入jar包 在原有Springjar包基础上添加2个jar包 spring-webmvc-4.2.0.R ...