提交记录 10217


用户 题目 状态 得分 用时 内存 语言 代码长度
MN2016 noip17f. 【NOIP2017】列队 Accepted 100 680.146 ms 44716 KB C++ 2.78 KB
提交时间 评测时间
2019-08-23 17:32:36 2020-08-01 02:03:24
#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;

const int maxn=3000100;
typedef long long ll;
int n,m,Q,tot,root[maxn];
struct node
{
	int fa,ch[2];
	ll lval,rval,siz;
}a[maxn];
queue<int>q;
#define R register
#define I inline

I bool get(R int x)
{
	return x==a[a[x].fa].ch[1];
}

I void update(R int x)
{
	a[x].siz=a[a[x].ch[0]].siz+a[a[x].ch[1]].siz+a[x].rval-a[x].lval+1;
}

I int newnode(R ll lv,R ll rv)
{
	R int x;
	if (!q.empty())
	{
		x=q.front();
		q.pop();
	}
	else
		x=++tot;
	a[x].fa=a[x].ch[0]=a[x].ch[1]=0;
	a[x].lval=lv;
	a[x].rval=rv;
	a[x].siz=rv-lv+1;
	return x;
}

I void rotate(R int x)
{
	int y=a[x].fa,z=a[y].fa,k=get(x),w=a[x].ch[k^1];
	a[y].ch[k]=w;
	a[w].fa=y;
	a[z].ch[get(y)]=x;
	a[x].fa=z;
	a[x].ch[k^1]=y;
	a[y].fa=x;
	update(y);
	update(x);
}

I void splay(R int x,R int id)
{
	R int y,z;
	while (a[x].fa)
	{
		y=a[x].fa,z=a[y].fa;
		if (z)
		{
			if (get(x)==get(y))
				rotate(y);
			else
				rotate(x);
		}
		rotate(x);
	}
	root[id]=x;
}

I void push_back(R int id,R ll lv,R ll rv)
{
	R int x=newnode(lv,rv);
	if (!root[id])
	{
		root[id]=x;
		return;
	}
	R int rt=root[id];
	while (a[rt].ch[1])
		rt=a[rt].ch[1];
	splay(rt,id);
	a[rt].ch[1]=x;
	a[x].fa=rt;
	update(rt);
}

I int split(R int id,R int x,R ll k)
{
	R int y=newnode(a[x].lval+k,a[x].rval);
	a[x].rval=a[x].lval+k-1;
	if (!a[x].ch[1])
	{
		a[x].ch[1]=y;
		a[y].fa=x;
		splay(y,id);
		return y;
	}
	R int t=a[x].ch[1];
	while (a[t].ch[0])
		t=a[t].ch[0];
	a[t].ch[0]=y;
	a[y].fa=t;
	while (t!=x)
	{
		update(t);
		t=a[t].fa;
	}
	splay(y,id);
	return y;
}

I ll pop_kth(R int id,R ll k)
{
	R int x=root[id];
	while (1)
	{
		if (a[a[x].ch[0]].siz>=k)
			x=a[x].ch[0];
		else
		{
			k-=a[a[x].ch[0]].siz;
			if (k<=a[x].rval-a[x].lval+1)
			{
				if (k!=a[x].rval-a[x].lval+1)
					split(id,x,k);
				if (k!=1)
					x=split(id,x,k-1);
				break;
			}
			else
			{
				k-=a[x].rval-a[x].lval+1;
				x=a[x].ch[1];
			}
		}
	}
	splay(x,id);
	a[a[x].ch[0]].fa=a[a[x].ch[1]].fa=0;
	if (!a[x].ch[0])
	{
		root[id]=a[x].ch[1];
		q.push(x);
		return a[x].lval;
	}
	int t=a[x].ch[0];
	while (a[t].ch[1])
		t=a[t].ch[1];
	splay(t,id);
	a[t].ch[1]=a[x].ch[1];
	a[a[x].ch[1]].fa=t;
	update(t);
	q.push(x);
	return a[x].lval;
}

int read()
{
	int x=0;
	char c=getchar();
	while (c<48||c>57)
		c=getchar();
	while (c>=48&&c<=57)
		x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x;
}

int main()
{
	R int i,j;
	R ll val;
	n=read(),m=read(),Q=read();
	for (i=1;i<=n;i++)
	{
		push_back(i,1ll*(i-1)*m+1,1ll*(i-1)*m+m-1);
		push_back(0,1ll*i*m,1ll*i*m);
	}
	while (Q--)
	{
		i=read(),j=read();
		if (j==m)
		{
			val=pop_kth(0,1ll*i);
			push_back(0,val,val);
			printf("%lld\n",val);
		}
		else
		{
			val=pop_kth(0,1ll*i);
			push_back(i,val,val);
			val=pop_kth(i,1ll*j);
			push_back(0,val,val);
			printf("%lld\n",val);
		}
	}
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1486.77 us164 KBAcceptedScore: 5

Testcase #2469.48 us164 KBAcceptedScore: 5

Testcase #3495.68 us164 KBAcceptedScore: 5

Testcase #4499.34 us168 KBAcceptedScore: 5

Testcase #5501.35 us164 KBAcceptedScore: 5

Testcase #6503.62 us164 KBAcceptedScore: 5

Testcase #72.668 ms3 MB + 800 KBAcceptedScore: 5

Testcase #82.606 ms3 MB + 788 KBAcceptedScore: 5

Testcase #92.886 ms4 MB + 100 KBAcceptedScore: 5

Testcase #102.596 ms3 MB + 716 KBAcceptedScore: 5

Testcase #11107.761 ms3 MB + 744 KBAcceptedScore: 5

Testcase #12106.88 ms3 MB + 724 KBAcceptedScore: 5

Testcase #13395.347 ms11 MB + 188 KBAcceptedScore: 5

Testcase #14371.819 ms10 MB + 1012 KBAcceptedScore: 5

Testcase #15466.013 ms33 MB + 752 KBAcceptedScore: 5

Testcase #16486.145 ms34 MB + 72 KBAcceptedScore: 5

Testcase #17165.531 ms14 MB + 504 KBAcceptedScore: 5

Testcase #18157.885 ms14 MB + 148 KBAcceptedScore: 5

Testcase #19677.683 ms42 MB + 648 KBAcceptedScore: 5

Testcase #20680.146 ms43 MB + 684 KBAcceptedScore: 5


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-29 23:29:18 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠