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. 为了便 ...
随机推荐
- 转 tensorflow模型保存 与 加载
使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获 ...
- SSM整合报错org.springframework.beans.factory.UnsatisfiedDependencyException
我解决的办法是把.m2仓库所有文件删除,重新maven project就可以了. 但是在做这一步之前,报错如下: ①org.springframework.beans.factory.Unsatisf ...
- 终于搞懂了shell bash cmd...
问题一:DOS与windows中cmd区别 在windows系统中,“开始-运行-cmd”可以打开“cmd.exe”,进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分, ...
- Unity 和 3DMAx
3DMax转换成DAE模式才会有纹理信息.
- unity屏幕坐标转世界坐标结果为(0,0,0)
代码: wv转出来一直为(0,0,0),卡了好久,问别人说要转化的屏幕坐标Z不能为0 阿西吧!特此记录
- C# 过滤HTML,脚本,数据库关键字,特殊字符
/// <summary> /// 过滤标记 /// </summary> /// <param name="NoHTML">包括HTML,脚本 ...
- for each/in/of的解释and example
for-of 循环:代码示例for (var value of myArray) {console.log(value);}循环的对象需为一个数组 无法记录索引 可以相应break.continue. ...
- IOS-源代码管理工具(Git)
一.简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Benedict ...
- 基于vue-cli,测试非父子传值时,碰到 keep-alive的神奇
非父子传值测试 一直都很好奇非父子传值到底如何,结果入坑许久才爬出来,才知道在脚手架里测试就是坑. 问题: 测试非父子传值时,由于组件之间是通过路由进行跳转,值传过去又被刷掉 思路: 因为路由跳转,相 ...
- 小练习:vaild number
1.描述 给定字符串,若该字符串表示的是数字,则输出true,否则输出false 2.分析 题目一看感觉不难,做起来却很麻烦,首先是数字的各种表示要知道,然后就是对这些不同形式的数字进行筛选判断.该题 ...