BZOJ4415: [Shoi2013]发牌
显然可以线段树或树状数组上二分。
然而直接写splay在bzoj上并不会T。
然而发这题的目的只是因为我又忘了return了啊啊啊啊(TдT)
内心十分崩溃。关键是在本地还能过。
#include<cstdio>
#include<algorithm>
#define L(t) t->c[0]
#define R(t) t->c[1]
#define Z(t) (L(t)->s+1)
#define N 700005
#define M (s+t>>1)
using std::swap;
struct node{
int v,s;
node *c[2];
}e[N],*back=e+1,
*null=e,*root;
node* update(node* t){
t->s=R(t)->s+Z(t);
return t;
}
void link(bool i,
node*& t,node*& s){
node* d=t->c[i];
t->c[i]=s;
s=update(t),t=d;
}
node* splay(int v,
node*& t=root){
node* d[]={null,null};
while(v!=Z(t)){
bool i=v>Z(t);
v-=i*Z(t);
if(v!=Z(t->c[i])
&&i==v>Z(t->c[i])){
v-=i*Z(t->c[i]);
link(i,t,
t->c[i]->c[i^1]);
}
link(i,t,d[i]);
}
for(int i=0;i!=2;++i){
node* s=t->c[i^1];
while(d[i]!=null)
link(i,d[i],s);
t->c[i^1]=s;
}
return update(t);
}
node* build(int s,int t){
if(s<=t){
node* a=back++;
a->v=M;
L(a)=build(s,M-1);
R(a)=build(M+1,t);
return update(a);
}
return null;
}
node*& splay(int s,int t){
splay(s);
return L(splay(
t-s+2,R(root)));
}
struct io_t{
char p[1<<25],*s;
char e[1<<25],*t;
int a[24];
io_t():s(p),t(e){
fread(s,1,
sizeof p,stdin);
}
~io_t(){
fwrite(e,1,
t-e-1,stdout);
}
operator int(){
static int v;
v=0;
while(*s<48)
++s;
do
v=v*10+*s++-48;
while(*s>32);
return v;
}
void print(int v){
static int* q=a;
if(!v)*t++=48;
else{
if(v<0)
*t++=45,
v*=-1;
while(v)
*q++=v%10+48,
v/=10;
while(q!=a)
*t++=*--q;
}
*t++=10;
}
}ip;
int n=ip,s=1;
int main(){
root=build(0,n+1);
for(;n;--n){
s=(s+ip-1)%n+1;
ip.print(
splay(s,s)->v);
L(R(root))=null;
}
}
BZOJ4415: [Shoi2013]发牌的更多相关文章
- BZOJ4415: [Shoi2013]发牌 树状数组+二分
Description 假设一开始,荷官拿出了一副新牌,这副牌有N张不同的牌,编号依次为1到N.由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为1, 2,……直到N,N号牌在牌库底.为了发完所 ...
- BZOJ4415:[SHOI2013]发牌(线段树)
Description 假设一开始,荷官拿出了一副新牌,这副牌有N张不同的牌,编号依次为1到N.由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为1, 2,……直到N,N号牌在牌库底.为了发完所 ...
- BZOJ4415 SHOI2013发牌(线段树)
似乎是noip2017d2t3的一个部分分.用splay的话当然非常裸,但说不定会被卡常.可以发现序列中数的(环上)相对位置是不变的,考虑造一棵权值线段树维护权值区间内还有多少个数留在序列中,每次在线 ...
- bzoj 4415: [Shoi2013]发牌
4415: [Shoi2013]发牌 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 173 Solved: 124[Submit][Status][ ...
- [SHOI2013]发牌 解题报告
[SHOI2013]发牌 题意 对一个\(1\sim n(n\le 7\times 10^5)\)的环,指标最开始在\(1\),每次删去顺时针往后第\(d_i\)个元素,指标移到下一个位置.要求输出每 ...
- P3988 [SHOI2013]发牌
题目 P3988 [SHOI2013]发牌 做法 我们切牌时的状态: 手玩几次后我们发现切\(K\)次牌就是求堆顶一下的\(K+1\)大值,套上主席树就好了 My complete code #inc ...
- BZOJ 4415 洛谷 3988 [Shoi2013]发牌
[题解] 权值线段树.查询当前牌堆顶的牌并且删掉就好了. #include<cstdio> #include<algorithm> #define N 3000010 #def ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- android之MP3播放器(1)
该播放器只是对本地的MP3文件进行简单的播放 布局文件 布局文件中设置了三个按钮分别来进行播放.暂停和继续播放 <?xml version="1.0" encoding=&q ...
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...
- C#高级特性_Lambda
“Lambda 表达式”(lambda expression)是一个匿名函数 省略delegate,甚至省略参数类型: 直接用(参数)=> {语句或表达式} 例如: button1.Click ...
- 屠龙之路_假期罢工和公主私奔_SixthDay
摘要:屠龙少年经过一周的长途跋涉后,终于来到了传说中的周末客栈.周末客栈是屠龙之路的必经之地,屠龙少年可以在周末客栈补给干粮,修补装备,好好休息一下,以便更好的上路.周末客栈有个不成文的规定:凡入住者 ...
- ubuntu14.04 安装配置JDK1.7
1,下载jdk-7u45-linux-x64.tar.gz 网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downlo ...
- 堆 poj 2010
选n个人从c个中 花费不超过f c个人的成绩和花费 求分数中位数最大 n是奇数 显然中位数是n/2+1 ~c-n/2之间的(假如存在的话) 用大顶堆维护前n/2个小的花费 求出以这个人为中位数的花费 ...
- poi-处理excel的单元格日期数据
poi处理excel时,当excel没有明确指明是哪个类型的数据时,poi很可能处理单元格的日期数据时就有可能是一串数字.而使用java程序基本无法转换 以下为对poi处理日期情况一些方面的处理(不是 ...
- 71.Android之长连接实现
转载:http://blog.csdn.net/qq_23547831/article/details/51690047 本文中我们将讲解一下App的长连接实现.一般而言长连接已经是App的标配了,推 ...
- BZOJ 1142: [POI2009]Tab
1142: [POI2009]Tab Time Limit: 40 Sec Memory Limit: 162 MBSubmit: 213 Solved: 80[Submit][Status][D ...
- Hadoop版本变迁
内容来自<Hadoop技术内幕:深入解析YARN架构设计与实现原理>第2章:http://book.51cto.com/art/201312/422022.htm Hadoop版本变迁 当 ...