正解:动态开点线段树

解题报告:

传送门!

因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ

然后说下,这题有很多种方法,我目前是先只写个最傻逼的方法,等学了splay什么的再来upd一下QAQ(这题好像有,线段树.树状数组.splay等各种方法,我可能都会写只要我麻油咕QAQ

然后就直接进入正题QAQ

首先其实要知道动态开点线段树和线段树思想什么的都是一样儿的,只是实现方法有一点儿区别(就是动态开点线段树节省点儿空间而已QAQ

所以就考虑线段树怎么做昂QAQ

首先可以发现,每次变动之后,有影响的只会是这个点,这一行,最后一列,对趴

所以可以考虑对每一行(不包括最后一个点QAQ)以及最后一列分别开个线段树

然后每次对当前操作(x,y),先记录ans,并把这个编号从x这一行的线段树中删去,加入第n+1棵树的最后一个位置,然后把第n+1棵的x位置加入到第x行的最后一个位置

然后注意以下如果x=n也就是说它本来就在最后一列的时候就不用管了QAQ

然后关于动态开点,我提下QAQ

考虑q的范围,即最多有q个点加入,那么线段树的长度最长为 max(n,m)+q

然后考虑到nmq范围,所以动态开点,over

然后再说一个方法,其实也是动态开点线段树,只是还要简单点儿,因为它还开了个vector

然后有vector的话就每次压进去就好了鸭,就是说线段树是个权值线段树记录被修改后的数字的,具体的值在vector中查询一下就好

具体看代码QAQ

然后记得开ll,,,我也不知道我什么猪脑子开了个int然后还麻油发现有什么不对,,,我都佩服我自己了QAQ

$upd:$半年后$gql$重新来康眼差点忘了咋做了,,,一句话总结就,$vector$存数值.线段树存下标,然后就可以资瓷删除操作了.

       另外安利$loj$最短代码,思想和我是一样的但代码绝短,,,$QAQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define gc getchar()
#define int long long
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i) const int N=3e5+,M=1e7+;
int n,m,q,rt[N],nod_cnt,mx;
struct sgtr{int ls,rs,sz;}tr[M];
vector<int>v[N]; il int read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void modify(int &nw,int l,int r,int to)
{
if(!nw)nw=++nod_cnt;++tr[nw].sz;if(l==r)return;
int mid=(l+r)>>;
if(to<=mid)modify(tr[nw].ls,l,mid,to);else modify(tr[nw].rs,mid+,r,to);
}
il int query(int nw,int l,int r,int to)
{
if(l==r)return l;int mid=(l+r)>>,tmp=mid-l+-tr[tr[nw].ls].sz;
if(to<=tmp)return query(tr[nw].ls,l,mid,to);return query(tr[nw].rs,mid+,r,to-tmp);
}
il int wk1(int x,int y)
{
int pos=query(rt[n+],,mx,x);modify(rt[n+],,mx,pos);
int ans=(pos<=n?1ll*pos*m:v[n+][pos-n-]);
return v[n+].push_back(y?y:ans),ans;
}
il int wk2(int x,int y)
{
int pos=query(rt[x],,mx,y);modify(rt[x],,mx,pos);
int ans=(pos<m?1ll*(x-)*m+pos:v[x][pos-m]);
return v[x].push_back(wk1(x,ans)),ans;
} main()
{
// freopen("ld.in","r",stdin);freopen("ld.out","w",stdout);
n=read();m=read();q=read();mx=max(n,m)+q;
while(q--){int x=read(),y=read();printf("%lld\n",(y==m?wk1(x,):wk2(x,y)));}
return ;
}

先放下开vector做的代码QAQ(然后不开vector的代码可能就咕了QAQ?

洛谷P3960 列队 NOIp2017 线段树/树状数组/splay的更多相关文章

  1. 洛谷 P3960 列队【线段树】

    用动态开点线段树分别维护每一行和最后一列,线段树的作用是记录被选的点的个数以及查询第k个没被选的点,每次修改,从行里标记被选的点,从最后一列标记向左看齐之后少的点,然后用vector维护行列的新增点 ...

  2. 洛谷P3960 列队(动态开节点线段树)

    题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...

  3. 洛谷P3960 列队(NOIP2017)(Splay)

    洛谷题目传送门 最弱的Splay...... 暴力模拟30分(NOIP2017实际得分,因为那时连Splay都不会)...... 发现只是一个点从序列里搬到了另一个位置,其它点的相对位置都没变,可以想 ...

  4. 洛谷 P3960 列队 解题报告

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

  5. 洛谷 P3960 列队

    https://www.luogu.org/problemnew/show/P3960 常数超大的treap #pragma GCC optimize("Ofast") #incl ...

  6. 洛谷P3960 列队(Splay)

    传送门 感觉自己好久不打数据结构已经完全不会了orz…… 据说正解树状数组?然而并不会 首先考虑一下每一次操作,就是把一个人从这一行中取出并放到行的最后,再从最后一列取出放到列的最后 那么这两种操作其 ...

  7. 洛谷P3960 列队 Splay

    其实思路并不算太难,就是代码量相对较大. 我们将一次离队转换为一次删除和两次加入,这样就可以保证空间是动态分配的,最大也不会暴空间. 说实话写之前感觉会很恶心,但是代码量就还好吧,有些细节需要特殊注意 ...

  8. NOIP2017提高组Day2T3 列队 洛谷P3960 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...

  9. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

随机推荐

  1. 【Linux】防火墙与CentOS中的iptables

    [iptables] 参考好文:http://www.zsythink.net/archives/1199.这个博客的作者写了深入浅出的iptables介绍,基本上我就是做个他的读书笔记. ■ 基本介 ...

  2. WebRTC 零基础开发者教程(中文版)下载

    WebRTC 简介 WebRTC,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术. WebRTC提 ...

  3. Java知多少(中)

    Java知多少(上) )interface接口 )接口和抽象类的区别 )泛型详解 )泛型通配符和类型参数的范围 )异常处理基础 )异常类型 )未被捕获的异常 )try和catch的使用 )多重catc ...

  4. Android qualcomm WCNSS_qcom_cfg.ini 参数介绍

    本文介绍WCNSS_qcom_cfg.ini中常用参数的作用. wifi 日志等级 vosTraceEnableBAP=255 vosTraceEnableTL=255 vosTraceEnableW ...

  5. 【JAVA-JDT-AST】Java抽象语法树的构建、遍历及转成dot格式(附Github源码)

    Background: 最近为了重现tree-based clone detection的论文:L. Jiang, G. Misherghi, Z. Su, and S. Glondu. Deckar ...

  6. 浅谈webpack4.0 性能优化(转)

    前言:在现实项目中,我们可能很少需要从头开始去配置一个webpack 项目,特别是webpack4.0发布以后,零配置启动一个项目成为一种标配.正因为零配置的webpack对项目本身提供的“打包”和“ ...

  7. B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  8. Media Session API 为当前正在播放的视频,音频,提供元数据来自定义媒体通知

    google 文档 https://developers.google.cn/web/updates/2017/02/media-session <html lang="zh-cmn- ...

  9. TF-IDF概念

    之前就了解过TF-IDF,现在做一个回顾. 概念: TF(Term Frequency)词频:一个文档中关键词出现的次数/该文档的总词数, IDF(Inverse Document Frequency ...

  10. c语言中的左移和右移

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1;i = i << 2;  //把i里的值左移2位 也就是说,1的2进制是00 ...