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啊!!!虽然当时我也不会权值线段树 这道 ...
随机推荐
- 更改gradle的java的class文件输出目录的结构
group 'com.thinkvenus.common'version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 r ...
- opencv 高级拼接函数Stitcher
Stitcher https://docs.opencv.org/trunk/d8/d19/tutorial_stitcher.html http://blog.csdn.net/czl389/art ...
- [csp-201709-3]JSON查询-编译原理
声明:这个代码几乎完全就是照抄hyh学长的!!! 有什么问题我会删掉这篇的emm 当初面试的时候我的方向就是编译原理...然后学长发了个1400+的代码实现一个简化的c编译器...没看懂qaq 感觉很 ...
- Tomcat面试题目
1.tomcat给你你怎样去调优? 1. JVM参数调优:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值.这两个值的大小一般根据需要进 ...
- DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead extract-text-webpack-plugin 提取css报错
深入浅出Webpack 1-5 使用pulugin extract-text-webpack-plugin 提取css报错 DeprecationWarning: Tapable.plugin is ...
- 项目开发 -- ZFS容量分配
存储池 allocated 池中已实际分配的存储空间量.该属性也可通过其简短列名alloc来引用. capacity 已用的池空间百分比.此属性也可通过其简短列名cap来引用. dedupratio ...
- js判断手机端(Android手机还是iPhone手机)
/** * [isMobile 判断平台] * @param test: 0:iPhone 1:Android */ function ismobile(test){ var u = navigato ...
- rebbitmq之python_pika监控远程连接及自动恢复(七)
前言 客户端连接rabbitmq后,如果长时间没有数据的传输,rabbitmq会申请关闭TCP连接,造成该TCP连接下的所有的信道都不可用,很多时候为了传输数据的高效率,我们会先创建一个信道池,这样省 ...
- python 并发爬虫的快感
import time from tomorrow import threads from requests_html import HTMLSession session=HTMLSession() ...
- python 内置函数eval()、exec()、compile()
eval 函数的作用: 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式,而不是复杂的代码逻辑. eval(source, globals=None, locals=Non ...