用动态开点线段树分别维护每一行和最后一列,线段树的作用是记录被选的点的个数以及查询第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 列队【线段树】相关推荐

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

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

  2. 洛谷 p3372 模板-线段树 1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...

  3. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  4. 【洛谷 3372】线段树 1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

  5. 洛谷P3352 [ZJOI2016]线段树

    P3352 [ZJOI2016]线段树 (^ w ^) 题目描述 小Yuuka遇到了一个题目:有一个序列a_1,a_2,?,a_n,q次操作,每次把一个区间内的数改成区间内的最大值,问最后每个数是多少 ...

  6. 【洛谷】【线段树】P3353 在你窗外闪耀的星星

    [题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...

  7. 洛谷P3960 列队(Splay)

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

  8. 洛谷P3960 列队【Splay】

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

  9. 【洛谷P3960】列队题解

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

最新文章

  1. 【青少年编程】【一级】森林的一天
  2. 启动pip时,< Fatal error in launcher: Unable to create process using ‘“‘ >问题的原因及解决方法
  3. sublime配置攻略
  4. linux编程实现dns请求,linux – 使用BIND实现辅助DNS服务器的最佳方式
  5. 从0开始配置Flutter并运行demo
  6. T4生成实体和简单的CRUD操作
  7. apache伪静态综述
  8. 抄袭路虎极光多年的陆风X7 终于迎来法院裁定:即刻停止生产
  9. 自己本地如何玩redis_如何把win10系统本地磁盘图标更改为自己的照片
  10. 饭店点餐系统之系统网络结构
  11. [Idea] Add Abbreviation的使用
  12. 迈微科讯 | 最新科技发展资讯
  13. 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
  14. 如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)
  15. 2d加速 stm32_emWin做人机用户界面显示刷屏慢? 试试带2D图形加速的GUI图形屏
  16. 人工智能往哪个方向发展有前途?计算机视觉还是自然语言处理?
  17. opencv_contrib安装教程
  18. 百度云智学院AI学习路线
  19. 1152:最大数max(x,y,z)
  20. 云创大数据1+X大数据应用部署与调优职业技能等级证书预申报正式开启!

热门文章

  1. Centos 6.0/ Nginx 安装与配置
  2. python-print
  3. error: jump to label ‘XXXX’ [-fpermissive]
  4. hdu3395纯KM
  5. HTML行间距的设置方法
  6. JSP学习02-config内置对象
  7. VMWare 6.0桥接模式虚拟机网络配置
  8. 回复——在我测试的软件说明中,说安装好jboss后,在浏览器的地址栏中输入127.0.0.1:88这……...
  9. 为treeview添加客户端事件
  10. MySQL8与PG10:新版本下的较量谁更胜一筹?