这题我改了三天,考场上部分分暴力拿了50,考完试发现与正解很接近只是没写出来。

对于每一行和最后一列建n+1颗线段树,维护前缀和。

复杂度qlogn

假如你移动一个坐标为(x,y)的人,你要将第x行线段树中前缀和为y处的值变为0,再将其移至最后一列的末尾,然后将最后一列中前缀和为x处的值变为一,并将这个位置上的数添加到第x行线段树的末尾。

   #include<bits/stdc++.h>
using namespace std;
int n,m,q;
typedef long long ll;
struct node
{
int l,r,s;bool lz;ll x,y;
}t[]; int idx,mx[],ed[],id[];
void pd(int z)
{
if(!t[z].lz)
{
t[z].l=++idx;
t[z].r=++idx;
ll m=(t[z].x+t[z].y)>>;
t[t[z].l].x=t[z].x;t[t[z].l].y=m;
t[t[z].r].x=m+;t[t[z].r].y=t[z].y;
t[t[z].l].s=t[t[z].l].y-t[t[z].l].x+;
t[t[z].r].s=t[t[z].r].y-t[t[z].r].x+;
t[z].s=t[t[z].l].s+t[t[z].r].s;
t[z].lz=;
}
}
void change(int z,int l,int r,int L,int R,ll l1,ll r1)
{
if(l==L&&r==R)
{
t[z].x=l1;t[z].y=r1;t[z].s=r1-l1+;return;
} pd(z);
int m=(l+r)>>;
if(R<=m)change(t[z].l,l,m,L,R,l1,r1);
else if(L>m)change(t[z].r,m+,r,L,R,l1,r1);
else
{
change(t[z].l,l,m,L,m,l1,l1+m-L);
change(t[z].r,m+,r,m+,R,l1+m-L+,r1);
}
t[z].s=t[t[z].l].s+t[t[z].r].s;
}
ll pos1,pos2;
void query(int z,int l,int r,int s)
{
if(l==r)
{
pos1=l;pos2=t[z].x;return;
}
if(t[z].l==) t[z].l=++idx;
if(t[z].r==) t[z].r=++idx;
pd(z);
int m=(l+r)>>;
if(t[t[z].l].s>=s)
query(t[z].l,l,m,s);
else
query(t[z].r,m+,r,s-t[t[z].l].s);
}
int xx[],yy[];
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=q;++i)
{
scanf("%d%d",&xx[i],&yy[i]);
mx[xx[i]]++;
}
for(int i=;i<=n;++i)
{
mx[i]+=m-;id[i]=++idx;
change(id[i],,mx[i],,m-,1ll*(i-)*m+,1ll*i*m-);
ed[i]=m-;
}
id[n+]=++idx;mx[n+]=n+q;ed[n+]=n;
for(int i=;i<=n;++i)
change(id[n+],,mx[n+],i,i,1ll*i*m,1ll*i*m);
int x,y;
for(int i=;i<=q;++i)
{
x=xx[i];y=yy[i];
if(y==m)
{
query(id[n+],,mx[n+],x);
change(id[n+],,mx[n+],pos1,pos1,,-);
ed[n+]++;
change(id[n+],,mx[n+],ed[n+],ed[n+],pos2,pos2);
printf("%lld\n",pos2);
}
else
{
//cout<<666<<endl;
query(id[x],,mx[x],y);
ll a1=pos1,a2=pos2;ed[n+]++;ed[x]++;
query(id[n+],,mx[n+],x); change(id[x],,mx[x],a1,a1,,-);
change(id[x],,mx[x],ed[x],ed[x],pos2,pos2); change(id[n+],,mx[n+],pos1,pos1,,-);
change(id[n+],,mx[n+],ed[n+],ed[n+],a2,a2); printf("%lld\n",a2);
}
}
return ;
}

NOIP2017 D2T3列队的更多相关文章

  1. 【学术篇】NOIP2017 d2t3 列队phalanx splay做法

    我可去他的吧.... ==============先胡扯些什么的分割线================== 一道NOIP题我调了一晚上...(其实是因为昨晚没有找到调试的好方法来的说...) 曾经我以 ...

  2. [luogu P3960] [noip2017 d2t3] 队列

    [luogu P3960] [noip2017 d2t3] 队列 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Syl ...

  3. 【NOIP2017】列队(Splay)

    [NOIP2017]列队(Splay) 题面 洛谷 题解 其实好简单啊... 对于每一行维护一棵\(Splay\) 对于最后一列维护一棵\(Splay\) \(Splay\)上一个节点表示一段区间 每 ...

  4. 【NOIP题解】NOIP2017 TG D2T3 列队

    列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...

  5. [NOIP2017 TG D2T3]列队

    题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...

  6. P2649 - 【NOIP2017】列队

    Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 ...

  7. 【NOIP2017】 列队

    线段树博客先开个点随笔.... 这意味着啥呢? 今天绝对要把这道题写出来并且更掉这篇blog!!!! ~ upd:懂了哈哈哈哈哈哈哈 先贴代码 回家+讲解 ---------------------- ...

  8. [LUOGU] [NOIP2017] P3960 列队

    题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行 ...

  9. 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)

    传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...

随机推荐

  1. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测 LCT

    [题意]给定n个点和m个操作,每次操作:1.连接2个点.2.断开2个点.3.查询2个点是否连通.m<=2*10^5. [算法]Link-Cut Tree [题解]LCT模板题,Link,Cut, ...

  2. UIDynamicBehavior的行为类翻译

    CHENYILONG Blog UIDynamicBehavior的行为类翻译 © chenyilong. Powered by Postach.io Blog

  3. 推箱子 BFS

    [编程题] 推箱子 大家一定玩过“推箱子”这个经典的游戏.具体规则就是在一个N*M的地图上,有1个玩家.1个箱子.1个目的地以及若干障碍,其余是空地.玩家可以往上下左右4个方向移动,但是不能移动出地图 ...

  4. SDUT 3929

    Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...

  5. 如何关闭sublime更新提示

    前提:sublime已激活

  6. 使用vscode实现git同步

    用了git最方便的就是项目同步管理,回到家打开vscode只需要点击一下pull就能全部同步过来.是不是很方便....毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来..   我这里之前用的是国内的 ...

  7. python作业Select版本FTP(第十周)

    SELECT版FTP: 使用SELECT或SELECTORS模块实现并发简单版FTP 允许多用户并发上传下载文件 思路解析: 1. 使用IO多路复用的知识使用SELECTORS封装好的SELECTOR ...

  8. virtualenv搭建虚拟环境

    最近因为项目需要,要在CentOS 7 上搭建一套开发环境,虽说Python的背后有着庞大的开源社区支持,但是有一个缺点就是每个包的质量都参差不齐,如果我们在工作服务器上去测试安装每个包,就会造成整个 ...

  9. BurpSuite 设置Hostname Resolution

    #写在前面 这种情况你可能遇到过: 对方用了CDN, 你查到了对方真实IP, 但还不能100%肯定. 这时候, 最好的测试就是 win/linux修改HOST文件 Win重启电脑 Linux重启网络 ...

  10. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】

    转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...