题解:

考场实际得分:45

重新看了一下,发现至少80分是很好拿的

对于前30% 暴力

另20% 显然离线搞一下就可以了(大概当初连离线是啥都不知道)

另另30%其实只要维护第一行和最后一列就可以了,显然可以用splay来完成加点删点

满分做法:

1 .splay(是看了题解才知道了)

类似线段树的动态开点,splay也可以先把一个节点作为一段序列的维护,当使用时再裂点

2.动态开点线段树

#upd:8.8写了一下

写了30min,debug了30min左右

思路挺简单的,动态开点线段树维护,对最后一列开一颗线段树

然后细节就是最后一列,注意每次对某一行操作的时候要把正确的最后一位填入到当前行

查询时如果问最后一列,在那颗特殊的线段树里查

#define比void还是快好多啊

洛谷这个评测是什么鬼。。为什么一模一样的总时间差2s

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>IL void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
const int N=3.1e5;
const int N2=1.5e7;
int v[N2],s[N2],rs[N2],ls[N2];
ll now[N2];
int cnt,n,n1,m,q,e[N],root[N];
struct re{
ll a,b;
}jl;
#define min(x,y) ((x)<(y)?(x):(y))
struct sgt{
int m;
// #define mid ((h+t)>>1)
/*IL void sc(int &x,int h,int t)
{
if (x) return;
x=++cnt;
if (h<=m) v[x]=min(t,m)-h+1;
} */
#define sc(x,h,t) if (!(x)) {(x)=++cnt;if ((h)<=(m)) v[x]=min(t,m)-h+1;}
void query(rint x,rint h,rint t,int k,int z)
{
if (h==t)
{
if (k!=v[x])
{
jl=(re){,};
return;
}
v[x]-=z;
jl=(re){h,now[x]};
return;
}
rint &l1=ls[x],&l2=rs[x];
rint mid=(h+t)/,mid2=mid+;
sc(l1,h,mid); sc(l2,mid2,t);
v[x]-=z;
if (v[l1]>=k) query(l1,h,mid,k,z);
else query(l2,mid+,t,k-v[l1],z);
}
void change(int x,int h,int t,int pos,ll k)
{
if (h==t)
{
v[x]=; now[x]=k; return;
}
rint mid=(h+t)/,mid2=mid+;
if (pos<=mid)
{
sc(ls[x],h,mid); change(ls[x],h,mid,pos,k);
} else
{
sc(rs[x],mid2,t); change(rs[x],mid2,t,pos,k);
}
v[x]++;
}
}S[N];
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
read(n1); read(m); read(q); n=max(m,n1)+q;
rep(i,,n1) e[i]=m;
e[n1+]=n1;
rep(i,,n1) root[i]=i,v[i]=m,S[i].m=m;
S[n1+].m=n1;
root[n1+]=n1+,v[n1+]=n1;
cnt=n1+;
rep(i,,q)
{
int x,y;
read(x); read(y);
ll ans,ans2; re k;
S[x].query(root[x],,n,m,);
if (y!=m)
{
S[x].query(root[x],,n,y,); k=jl;
if (!k.b) ans=1ll*(x-)*m+k.a; else ans=k.b;
} else
{
S[n1+].query(root[n1+],,n,x,); k=jl;
if (!k.b) ans=m*k.a; else ans=k.b;
}
cout<<ans<<endl;
S[n1+].query(root[n1+],,n,x,); k=jl;
if (!k.b) ans2=1ll*k.a*m; else ans2=k.b;
S[x].change(root[x],,n,++e[x],ans2);
S[n1+].change(root[n1+],,n,++e[n1+],ans);
}
return ;
}

<noip2017>列队的更多相关文章

  1. [NOIP2017]列队 离线+SBT

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

  2. 题解[NOIP2017] 列队

    题解[NOIP2017] 列队 题面 解析 看到这题时感觉这个编号很难维护啊? 后来看了lzf大佬的题解才会.. 首先,考虑一个稍微暴力的做法, 维护每一行的前\(m-1\)个人和最后一列的\(n\) ...

  3. NOIP2017列队(phalanx)解题报告

    列队作为NOIP2017最后一道题,其实并不难,只是相对于其它题目,有点小小的工业 首先,这道题我用splay维护的,如果你不会splay,又想学一下splay,可以来这里学一学,接下来步入正题 首先 ...

  4. NOIP2017 列队 题解报告【56行线段树】

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

  5. [NOIP2017]列队 (Splay)

    题目链接 NOIP2017真的是不按常理出牌: 1.数学题不在Day2T1 2.一道水题一道细节极多的模拟题一道不知道怎么形容的题(小凯的疑惑)(因为我太菜了) 3.3道大火题 当时看到列队这题是毫无 ...

  6. NOIP2017 列队

    https://www.luogu.org/problemnew/show/P3960 p<=500 50分 模拟 每个人的出队只会影响当前行和最后一列 p<=500,有用的行只有500行 ...

  7. [NOIP2017] 列队(平衡树)

    考虑转化题意: 设这次操作删掉点\((x, y)\) 对于每一次向左看齐:在第x行删除\((x, y)\),并将y以后的点全部前移一位 对于每一次向前看齐:x以后的点全部上移一位,并在最后一列插入\( ...

  8. NOIP2017 列队——动态开点线段树

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

  9. Luogu 3960 [NOIP2017] 列队 - splay|线段树

    题解 是我从来没有做过的裂点splay... 看的时候还是很懵逼的QAQ. 把最后一列的$n$个数放在一个平衡树中, 有 $n$ 个点 剩下的$n$行数, 每行都开一个平衡树,开始时每棵树中仅有$1$ ...

随机推荐

  1. 流媒体技术学习笔记之(二)RTMP和HLS分发服务器nginx.conmf配置文件(解决了,只能播放RTMP流而不能够播放HLS流的原因)

    user www www; worker_processes ; error_log logs/error.log debug; #pid logs/nginx.pid; events { worke ...

  2. Linux安装mysql过程(转+完善)

    http://blog.csdn.net/jerome_s/article/details/52883234yum 安装MySQL   1. 检查安装情况           查看有没有安装过:   ...

  3. Git之创建仓库并上传/更新项目版本

    1.Git配置 使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息.使用git config命令进行配置: $ git config ...

  4. luogu P2123 皇后游戏

    传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...

  5. luogu P3576 [POI2014]MRO-Ant colony

    传送门 一群蚂蚁能被吃,也就是走到指定边的两端点之一要走到另一端点时有\(k\)只,我们可以从这两端点逆推,记两个值为走到某个点时最后会被吃掉\(k\)只蚂蚁的蚂蚁数量范围,式子下面有,很好理解(雾) ...

  6. B - SETI POJ - 2065 (高斯消元)

    题目链接:https://vjudge.net/contest/276374#problem/B 题目大意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'* ...

  7. proxysql 系列 ~ 总揽概括

    一 简介: proxysql相关知识汇总 二 proxysql 相关报错    1 proxysql 报错 too many connections     分析 proxysql关于连接池的参数  ...

  8. mysql原理~undo管理

    一 简介:undo管理 二 各版本说明 1 5.5     undo位置:默认ibdata1中,不支持独立表空间   缺点:大事务可能造成ibdata1暴涨,只能dump导出导入或者从新搭建  参数: ...

  9. ubuntu 14.04 软件中心闪退解决方案

    法一: gksudo gedit /usr/share/software-center/softwarecenter/ui/gtk3/views/lobbyview.py 注释下面这句话(注释使用#号 ...

  10. ubuntu14.04 VIM for python 一键配置

    # 超强vim配置文件 [![Build Status](https://travis-ci.org/ma6174/vim.png?branch=master)](https://travis-ci. ...