NOIP2017 D2T3列队
这题我改了三天,考场上部分分暴力拿了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列队的更多相关文章
- 【学术篇】NOIP2017 d2t3 列队phalanx splay做法
我可去他的吧.... ==============先胡扯些什么的分割线================== 一道NOIP题我调了一晚上...(其实是因为昨晚没有找到调试的好方法来的说...) 曾经我以 ...
- [luogu P3960] [noip2017 d2t3] 队列
[luogu P3960] [noip2017 d2t3] 队列 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Syl ...
- 【NOIP2017】列队(Splay)
[NOIP2017]列队(Splay) 题面 洛谷 题解 其实好简单啊... 对于每一行维护一棵\(Splay\) 对于最后一列维护一棵\(Splay\) \(Splay\)上一个节点表示一段区间 每 ...
- 【NOIP题解】NOIP2017 TG D2T3 列队
列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...
- [NOIP2017 TG D2T3]列队
题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...
- P2649 - 【NOIP2017】列队
Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 ...
- 【NOIP2017】 列队
线段树博客先开个点随笔.... 这意味着啥呢? 今天绝对要把这道题写出来并且更掉这篇blog!!!! ~ upd:懂了哈哈哈哈哈哈哈 先贴代码 回家+讲解 ---------------------- ...
- [LUOGU] [NOIP2017] P3960 列队
题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行 ...
- 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)
传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...
随机推荐
- XMLHttpRequest 整理
看了SF 上的一篇文章感触颇深:你真的会使用XMLHttpRequest吗? 在这我写上我读后的笔记: <!DOCTYPE html> <html lang="en&quo ...
- SMTP暴力破解
这里实现一个SMTP的暴力破解程序,实验搭建的是postfix服务器,猜解用户名字典(user.txt)和密码字典(password.txt)中匹配的用户名密码对, 程序开发环境是: WinXP VC ...
- JS 检测客户端断网情况
常用方法 1 navigator.onLine 2 window.addEventListener() 3 获取网络资源 4 ajax请求 1. navigator.onLine 只会在机器未连上路由 ...
- ASLR
@author:dlive ASLR address space layout randomization 微软从windows vista/windows server 2008(kernel ve ...
- NoSQL-来自维基百科
NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. 两者存在许多显著的不同点,其中最重要的是NoSQL不使用SQL作为查询语言.其数据存储可以不需 ...
- xshell连接Ubuntu虚拟机
Ubuntu系统 1,安装ssh sudo apt-get install openssh-server 2,启动ssh进程 /etc/init.d/ssh start 3,查看进程信息 ps -e ...
- 004_Gradle 笔记——Java构建入门
Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码.而大部分的项目,它 们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建 ...
- C中常用格式格式码
一.常用printf格式码 二.常用scanf格式码
- html基础-css-选择器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Floyd_Warshall(任意两点之间的最短路)
/* O(V^3) 案例: 1 2 2 1 3 5 2 3 1 */ #include <cstdio>#include <iostream>using namespace s ...