显然可以线段树或树状数组上二分。

然而直接写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]发牌的更多相关文章

  1. BZOJ4415: [Shoi2013]发牌 树状数组+二分

    Description 假设一开始,荷官拿出了一副新牌,这副牌有N张不同的牌,编号依次为1到N.由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为1, 2,……直到N,N号牌在牌库底.为了发完所 ...

  2. BZOJ4415:[SHOI2013]发牌(线段树)

    Description 假设一开始,荷官拿出了一副新牌,这副牌有N张不同的牌,编号依次为1到N.由于是新牌,所以牌是按照顺序排好的,从牌库顶开始,依次为1, 2,……直到N,N号牌在牌库底.为了发完所 ...

  3. BZOJ4415 SHOI2013发牌(线段树)

    似乎是noip2017d2t3的一个部分分.用splay的话当然非常裸,但说不定会被卡常.可以发现序列中数的(环上)相对位置是不变的,考虑造一棵权值线段树维护权值区间内还有多少个数留在序列中,每次在线 ...

  4. bzoj 4415: [Shoi2013]发牌

    4415: [Shoi2013]发牌 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 173  Solved: 124[Submit][Status][ ...

  5. [SHOI2013]发牌 解题报告

    [SHOI2013]发牌 题意 对一个\(1\sim n(n\le 7\times 10^5)\)的环,指标最开始在\(1\),每次删去顺时针往后第\(d_i\)个元素,指标移到下一个位置.要求输出每 ...

  6. P3988 [SHOI2013]发牌

    题目 P3988 [SHOI2013]发牌 做法 我们切牌时的状态: 手玩几次后我们发现切\(K\)次牌就是求堆顶一下的\(K+1\)大值,套上主席树就好了 My complete code #inc ...

  7. BZOJ 4415 洛谷 3988 [Shoi2013]发牌

    [题解] 权值线段树.查询当前牌堆顶的牌并且删掉就好了. #include<cstdio> #include<algorithm> #define N 3000010 #def ...

  8. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  9. bzoj AC倒序

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

随机推荐

  1. jquery里面的$(this)和this都什么时候用,有什么区别

    当你用的是jquery时,就用$(this),如果是JS,就用this $(this).html( $(this).html() + " BAM! " + i ); 这个里的htm ...

  2. linux基础-第十六单元 yum管理RPM包

    第十六单元 yum管理RPM包 yum的功能 本地yum配置 光盘挂载和镜像挂载 本地yum配置 网络yum配置 网络yum配置 Yum命令的使用 使用yum安装软件 使用yum删除软件 安装组件 删 ...

  3. 网页中常用HTML字符实体

    摘要: 一些字符在 HTML 中拥有特殊的含义,比如小于号 () 用于定义 HTML 标签的开始.如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入字符实体. 字符实体有三部分:一 ...

  4. an important difference between while and foreach on Perl

    while (<STDIN>) { } # will read from standard input one line at a time foreach (<STDIN>) ...

  5. AFnetworking3.1的基本使用

    听说之后AFHttpWorking版本可能会影响到苹果的审核,今天下了最新版本的AFHttpWorking,并且做了简单的封装,我这里是通过cocoapods下载了两个工具 1=AFHttpWorki ...

  6. 3.python算法之完全数

    代码: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 3.完全数.py @t ...

  7. 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...

  8. Linux 传输文件

    不同的Linux之间copy文件通常有4种方法: ftp samba服务 sftp scp 我使用了scp在同网段的内网 ip之间传输,非常快.所以先介绍下scp的方法: scp 是 ssh管道下的c ...

  9. Teamviewer11现在无法捕捉屏幕画面。这可能是由于快速的用户切换或远程桌面会话断开/最小化。

    如果你用“远程桌面”连过去开启Teamviewer的话,当你退出“远程桌面”后,外网用Teamviewer连接就会出现这个问题. 解决方法: 不用远程连接过去开启Teamviewer,直接在在电脑本机 ...

  10. GitHub项目大全

    [微信网页版]: [查看被删的微信好友]https://github.com/0x5e/wechat-deleted-friends [网页版微信API,包含终端版微信及微信机器人]https://g ...