LG3960 列队
题意
分析
参照博客
树状数组+离线处理即可。
利用树状数组下标本质即可\(O(\log n)\)求第k大。
代码
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<string>
#define co const
#define il inline
#define rg register
const int MAXBUF=20000005;
char B[MAXBUF],*Si=B,*Ti=B;
inline char getc()
{
    if (Si==Ti) Ti=(Si=B)+fread(B,1,MAXBUF,stdin);
    if (Si==Ti) return 0;
    return *Si++;
}
template <class T>
inline void read(T &a)
{
    static char c;
    while ((c=getc())<'0'||c>'9');
    a=c-'0';
    while ((c=getc())>='0'&&c<='9') a=(a<<3)+(a<<1)+c-'0';
}
using namespace std;
typedef long long ll;
co int MAXN=3e5+7;
int n,m,nq;
int q[MAXN][2];
struct $
{
	int p,id;
	$(){}
	$(int p,int id):p(p),id(id){}
};
vector <$> t[MAXN];
typedef vector<$>::iterator it;
int c[MAXN<<1],mx; // edit 1
int lowbit(int x)
{
	return x&-x;
}
void add(int p,int v)
{
	for(int i=p;i<=mx;i+=lowbit(i))
		c[i]+=v;
}
int sum(int p)
{
	int res=0;
	for(int i=p;i;i-=lowbit(i))
		res+=c[i];
	return res;
}
int find(int p)
{
	int res=0;
	for(int i=20;i>=0;--i)
	{
		res+=(1<<i);
		if(res>mx||c[res]>=p) // 不足最后加1,过剩则无法处理
			res-=(1<<i);
		else
			p-=c[res];
	}
	return res+1;
}
int d[MAXN];
vector<ll>v[MAXN],lst;
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	read(n);read(m);read(nq);
	mx=max(n,m)+nq;
	for(int i=1;i<=nq;++i)
	{
		read(q[i][0]);read(q[i][1]);
		if(q[i][1]!=m)
			t[q[i][0]].push_back($(q[i][1],i));
	}
	for(int i=1;i<=mx;++i)
		add(i,1);
	for(int i=1;i<=n;++i)
	{
		for(it j=t[i].begin();j!=t[i].end();++j)
			add(d[j->id]=find(j->p),-1);
		for(it j=t[i].begin();j!=t[i].end();++j)
			add(d[j->id],1);
	}
	ll ans;
	for(int i=1;i<=nq;++i)
	{
		int x=find(q[i][0]);
		ans=x<=n?(ll)x*m:lst[x-n-1];
		add(x,-1);
		if(q[i][1]!=m)
		{
			v[q[i][0]].push_back(ans);
			ans=d[i]<m?((ll)q[i][0]-1)*m+d[i]:v[q[i][0]][d[i]-m];
		}
		lst.push_back(ans);
		printf("%lld\n",ans);
	}
	return 0;
}
LG3960 列队的更多相关文章
- 关于PHP堆栈与列队
		在PHP中数组常被当作堆栈(后进先出:LIFO)与队列(先进先出:FIFO)结构来使用.PHP提供了一组函数可以用于push与pop(堆栈)还有shift与unshift(队列)来操作数组元素.堆栈与 ... 
- 在PHP中如何使用消息列队
		/** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ... 
- BZOJ2720: [Violet 5]列队春游
		2720: [Violet 5]列队春游 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 173 Solved: 125[Submit][Status] ... 
- [NOIp 2017]列队
		Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有$n \times m$名学生, ... 
- NOIP2017D2T3 列队—Treap
		NOIP2017列队 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m ... 
- P2649 - 【NOIP2017】列队
		Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 ... 
- WebForm应用log4net记录错误日志——使用线程列队写入
		我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ... 
- 【洛谷P3960】列队题解
		[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ... 
- [NOIP]2017列队——旋转treap/非旋转treap
		Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m. 为了便 ... 
随机推荐
- Decrypting OWIN Authentication Ticket
			参考:https://long2know.com/2015/05/decrypting-owin-authentication-ticket/ AuthServer产生的Token因为没有制定自定义的 ... 
- 使用ASP.NET 的缓存机制的示例
			if (HttpContext.Current.Cache["code_" + CodeType] == null) { SysCodeService codeService = ... 
- flask学习(十一):if判断语句
			1. 语法: {% if xxx %} {% else %} {% endif %} 2. if的使用,和python中if相差无几 用if判断,当用户名存在且年龄大于18时,才显示用户名和注销 
- 1-17-Linux中计划任务与日志的管理
			本节所讲内容: 1-1 Linux中的计划任务 1-1-1 at计划任务的使用 1-1-2 cron 计划任务的使用 1-1 Linux服务器的日志管理 1-1-1 日志的种类和记录的方式 1-1-2 ... 
- H3C Huawei 交换机 IPv6环境配置
			# 使能IPv6报文转发功能. <Sysname> system-view [Sysname] ipv6 # 使能DHCPv6服务器功能. <Sysname> system-v ... 
- python 调用接口
			这个比较乱,抽口再修改一下. 工作需要调有赞API的接口数据, 返回数据. 进行数据处理 现在两部分比较重要:1 自动获取数据 , 2处理excel的过程. 明白接口的过程.传入参数 htt ... 
- 十二、dbms_logmnr(分析重做日志和归档日志)
			1.概述 作用:通过使用包DBMS_LOGMNR和DBMS_LOGMNR_D,可以分析重做日志和归档日志所记载的事务变化,最终确定误操作(例如DROP TABLE)的时间,跟踪用户事务操作,跟踪并还原 ... 
- 2: 使用Prism初始化程序(纯汉语版)
			本篇内容讲解了Prism应用程序启动和运行都发生了什么.一个Pris应用程序在程序启动期间需要注册和配置——这被叫做引导应用程序.Prism引导过程包括创建和配置一个模块目录,创建一个例如Unity的 ... 
- hdu 6092 Rikka with Subset(逆向01背包+思维)
			Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ... 
- 极简MarkDown教程(常用样式)
			推荐编辑软件,NotePad++ & MarkDownViewer++(插件),以下内容为MarkDown格式,可自行放到编辑软件中查看,或在线查看 #### . 标题 > 用#+空格开 ... 
