洛谷 P3960 列队【线段树】
用动态开点线段树分别维护每一行和最后一列,线段树的作用是记录被选的点的个数以及查询第k个没被选的点,每次修改,从行里标记被选的点,从最后一列标记向左看齐之后少的点,然后用vector维护行列的新增点
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=600005;
int n,m,q,mx,tot,rt[N];
vector<long long>a[N];
struct qwe
{int ls,rs,s;
}t[10000005];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void update(int &ro,int l,int r,int p)
{if(!ro)ro=++tot;t[ro].s++;if(l==r)return;int mid=(l+r)>>1;if(p<=mid)update(t[ro].ls,l,mid,p);elseupdate(t[ro].rs,mid+1,r,p);
}
int ques(int ro,int l,int r,int k)
{if(l==r)return l;int mid=(l+r)>>1;if(mid-l+1-t[t[ro].ls].s>=k)return ques(t[ro].ls,l,mid,k);elsereturn ques(t[ro].rs,mid+1,r,k-(mid-l+1-t[t[ro].ls].s));
}
int main()
{n=read(),m=read(),q=read(),mx=max(m,n)+q;while(q--){int x=read(),y=read();if(y==m){int p=ques(rt[n+1],1,mx,x);update(rt[n+1],1,mx,p);long long ans=p<=n?1ll*p*m:a[n+1][p-n-1];a[n+1].push_back(ans);printf("%lld\n",ans);}else{int p=ques(rt[x],1,mx,y);update(rt[x],1,mx,p);;long long ans=p<m?1ll*(x-1)*m+p:a[x][p-m];p=ques(rt[n+1],1,mx,x);update(rt[n+1],1,mx,p);long long ans2=p<=n?1ll*p*m:a[n+1][p-n-1];a[n+1].push_back(ans);a[x].push_back(ans2);printf("%lld\n",ans);}}return 0;
}
转载于:https://www.cnblogs.com/lokiii/p/9709749.html
洛谷 P3960 列队【线段树】相关推荐
- 洛谷P3960 列队(动态开节点线段树)
题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...
- 洛谷 p3372 模板-线段树 1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...
- 洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...
- 【洛谷 3372】线段树 1
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...
- 洛谷P3352 [ZJOI2016]线段树
P3352 [ZJOI2016]线段树 (^ w ^) 题目描述 小Yuuka遇到了一个题目:有一个序列a_1,a_2,?,a_n,q次操作,每次把一个区间内的数改成区间内的最大值,问最后每个数是多少 ...
- 【洛谷】【线段树】P3353 在你窗外闪耀的星星
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...
- 洛谷P3960 列队(Splay)
传送门 感觉自己好久不打数据结构已经完全不会了orz-- 据说正解树状数组?然而并不会 首先考虑一下每一次操作,就是把一个人从这一行中取出并放到行的最后,再从最后一列取出放到列的最后 那么这两种操作其 ...
- 洛谷P3960 列队【Splay】
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n × m n \times m n×m名 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
最新文章
- 【青少年编程】【一级】森林的一天
- 启动pip时,< Fatal error in launcher: Unable to create process using ‘“‘ >问题的原因及解决方法
- sublime配置攻略
- linux编程实现dns请求,linux – 使用BIND实现辅助DNS服务器的最佳方式
- 从0开始配置Flutter并运行demo
- T4生成实体和简单的CRUD操作
- apache伪静态综述
- 抄袭路虎极光多年的陆风X7 终于迎来法院裁定:即刻停止生产
- 自己本地如何玩redis_如何把win10系统本地磁盘图标更改为自己的照片
- 饭店点餐系统之系统网络结构
- [Idea] Add Abbreviation的使用
- 迈微科讯 | 最新科技发展资讯
- 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
- 如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)
- 2d加速 stm32_emWin做人机用户界面显示刷屏慢? 试试带2D图形加速的GUI图形屏
- 人工智能往哪个方向发展有前途?计算机视觉还是自然语言处理?
- opencv_contrib安装教程
- 百度云智学院AI学习路线
- 1152:最大数max(x,y,z)
- 云创大数据1+X大数据应用部署与调优职业技能等级证书预申报正式开启!
热门文章
- Centos 6.0/ Nginx 安装与配置
- python-print
- error: jump to label ‘XXXX’ [-fpermissive]
- hdu3395纯KM
- HTML行间距的设置方法
- JSP学习02-config内置对象
- VMWare 6.0桥接模式虚拟机网络配置
- 回复——在我测试的软件说明中,说安装好jboss后,在浏览器的地址栏中输入127.0.0.1:88这……...
- 为treeview添加客户端事件
- MySQL8与PG10:新版本下的较量谁更胜一筹?