LUOGU P3960 列队 (noip2017 day2T3)
解题思路
记得当时考试我还是个孩子,啥也不会QAQ。现在回头写,用动态开点的线段树,在每行和最后一列开线段树,然后对于每次询问,把x行y列的删去,然后再把x行m列的元素加入x行这个线段树,然后再把删去元素加到最后一列里,用一个vector维护变化后的标号。
代码
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<cstdlib>
- #include<vector>
- using namespace std;
- const int MAXN = ;
- typedef long long LL;
- inline int rd(){
- int x=,f=;char ch=getchar();
- while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
- while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
- return f?x:-x;
- }
- vector<LL> g[MAXN];
- int n,m,q,Max,num,rt[MAXN];
- LL pos;
- int sum[MAXN<<],ls[MAXN<<],rs[MAXN<<];
- LL query(int x,int l,int r,int k){
- if(l==r) return l;
- int mid=l+r>>,sizl=mid-l+-sum[ls[x]];
- if(sizl>=k) return query(ls[x],l,mid,k);
- else return query(rs[x],mid+,r,k-sizl);
- }
- void modify(int &x,int l,int r){
- if(!x){
- x=++num;
- ls[x]=rs[x]=;
- }
- sum[x]++;
- if(l<r){
- int mid=l+r>>;
- if(mid>=pos) modify(ls[x],l,mid);
- else modify(rs[x],mid+,r);
- }
- }
- LL Del_r(int x,LL now){
- pos=query(rt[n+],,Max,x);
- modify(rt[n+],,Max);
- LL ret=pos<=n?1ll*pos*m:g[n+][pos-n-];
- g[n+].push_back(now?now:ret);
- return ret;
- }
- LL Del_l(int x,int y){
- pos=query(rt[x],,Max,y);modify(rt[x],,Max);
- LL ret=pos<m?1ll*(x-)*m+pos:g[x][pos-m];
- g[x].push_back(Del_r(x,ret));
- return ret;
- }
- int main(){
- n=rd(),m=rd(),q=rd();Max=max(n,m)+q;
- int x,y;
- while(q--){
- x=rd(),y=rd();
- if(y==m) printf("%lld\n",Del_r(x,));
- else printf("%lld\n",Del_l(x,y));
- }
- return ;
- }
LUOGU P3960 列队 (noip2017 day2T3)的更多相关文章
- Luogu P3960 列队(动态开点线段树)
P3960 列队 题意 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有\(n \times m ...
- luogu P3960 列队
传送门 因为\(Splay\)可以\(O(logn)\)维护区间,所以直接对每一行维护第一个元素到倒数第二个元素的\(Splay\),最后一列维护一个\(Splay\),每次把选出来的点删掉,然后把那 ...
- 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay
正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...
- Luogu P3960 列队 线段树
题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...
- [luogu P3960] [noip2017 d2t3] 队列
[luogu P3960] [noip2017 d2t3] 队列 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Syl ...
- 洛谷 P3960 列队 解题报告
P3960 列队 题目描述 \(Sylvia\)是一个热爱学习的女♂孩子. 前段时间,\(Sylvia\)参加了学校的军训.众所周知,军训的时候需要站方阵. \(Sylvia\)所在的方阵中有\(n ...
- [LUOGU] [NOIP2017] P3960 列队
题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行 ...
- 洛谷P3960 列队(NOIP2017)(Splay)
洛谷题目传送门 最弱的Splay...... 暴力模拟30分(NOIP2017实际得分,因为那时连Splay都不会)...... 发现只是一个点从序列里搬到了另一个位置,其它点的相对位置都没变,可以想 ...
- NOIP2017 Day2T3 列队
首先可以观察到这样一个事实,如果 \((x, y)\) 出队,那么只会影响 \(x\) 这一行,以及最后一列的排布.并且可以发现,每次一个人出队,总会对最后一列有影响,因此我们可能需要将最后一列单独拿 ...
随机推荐
- 携程的 Dubbo 之路
本篇文章整理自董艺荃在 Dubbo 社区开发者日上海站的演讲. 缘起 携程当初为什么要引入 Dubbo 呢?实际上从 2013 年底起,携程内主要使用的就是基于 HTTP 协议的 SOA 微服务框架. ...
- vue知识点汇总
一.学习vue必须了解的几个知识点 1.node.js介绍 node是一个让JavaScript运行在服务端的开发平台,使用JavaScript也可以开发后台服务.说明白些它仅仅是一个平台,我们使用 ...
- poj2954Triangle
传送门 Pick定理 定点坐标为整点的三角形,面积为S,边上的整点个数为L,三角形内部整点个数为N S=N+L/2-1 //Achen #include<algorithm> #inclu ...
- Integer 类和 int 基本数据类型的区别
public static void main(String[] args) { Integer i = 10; Integer j = 10; System.out.println(i == j); ...
- socket远程执行命令
两个脚本模拟远程执行命令 cmd_server.py import socket import subprocess # 运行系统命令 sk = socket.socket() addess = (' ...
- idea激活破解
下载链接:https://pan.baidu.com/s/1BADk1MCm0YxtB6zoX0DivA 提取码 ze9m将破解补丁放到bin文件中jetbrains-all.jar 在这俩个文件最后 ...
- 零基础入门学习python--第二章 用Python设计第一个游戏
知识点汇总1. 什么是BIF? BIF(Built-in Functions)内置函数,共68个,可直接调用,方便程序员快速编写脚本程序.输入dir(__builtins__)即可查看所有内置函数,h ...
- <jquery>滚动例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 0讲Java,给你一条简单清晰的学习道路!
1. 计算机基础: 1.1 数据结构基础: 主要学习:1.向量,链表,栈,队列和堆,词典.熟悉2.树,二叉搜索树.熟悉3.图,有向图,无向图,基本概念4.二叉搜索A,B,C类熟练,9大排序熟悉.5.树 ...
- selenium基础(多表单切换、多窗口切换)
一.多表单的切换 frame:HTML页面中的一中框架,主要作用是在当前页面中指定区域显示另一页面元素: (HTML语言中,frame/iframe标签为表单框架) 在web ...