这题我改了三天,考场上部分分暴力拿了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】1036 [ZJOI2008]树的统计Count

    [算法]树链剖分+线段树 [题解]模板题,见http://www.cnblogs.com/onioncyc/p/6207462.html 调用线段数时要用新编号pos[i] !!! #include& ...

  2. 20155117王震宇 2016-2017-2 《Java程序设计》第八周学习总结

    教材学习内容总结 正则表达式 正则表达式是记录文本规则的代码 元字符 ^ :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置. $ :$会匹配行或字符串的结尾. \b :不会消耗任何字符 ...

  3. CSS 中 nth-child 和 nth-of-type 的区别

    假设有如下代码结构,想要查找 Piggy 那个 p <section> <h1>Words</h1> <p>Little</p> <p ...

  4. python开发规范(转载)

    转载自http://www.cnblogs.com/wangcp-2014/p/4838952.html 目录 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行 ...

  5. Ubuntu 17.10 用 apt 搭建 lamp 环境(精简版)

    这篇文章主要用来快速部署以 php 5.6 为主的 lamp 环境,要看详细安装包括虚拟主机配置的请参考这篇:http://www.cnblogs.com/mingc/p/7864030.html 一 ...

  6. ubuntu 命令配置ip 网关 dns

    如果是在虚拟机中使用Ubuntu,先设置好主机的网络,然后配置虚拟机Ubuntu的IP和网关 如果主机操作系统就是Ubuntu,请直接参照下文进行设置 内容如下: 1. 检验是否可以连通,就使用pin ...

  7. 64_t3

    texlive-dice-svn28501.0-33.fc26.2.noarch.rpm 24-May-2017 15:52 36490 texlive-dichokey-doc-svn17192.0 ...

  8. 002_让你的linux虚拟终端五彩缤纷(1)——LS颜色设置

  9. 对 makefile 中 .DEFAULT 的理解

    上例子: all:gao @echo "final".DEFAULT: @echo "In default" 由于 gao 是一个前提条件,但是 makefil ...

  10. Windows Phone 8/Windows 8 启动第三方应用程序并传递参数

    需要被其他应用启动的第三方应用需要注册protocol association,当一个应用程序启动一个特殊的URI的时候,那么注册了这个protocol的程序会自动启动,并且可以通过这个特殊的URI将 ...