Description

既然众所周知我就不多说了

Solution

考虑对于每一行的前(m−1)(m - 1)个点建一棵线段树,最后一列单独建一棵线段树,每次操作在线段树中修改后把接在后面的人的编号丢到一个vector 里就行了。至于空间,动态开点即可。

Code

//Au: Hany01#include<bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
#define For(i , j , k) for (register int i = (j) , i##_end_ = (k) ; i <= i##_end_ ; ++ i)
#define Fordown(i , j , k) for (register int i = (j) , i##_end_ = (k) ; i >= i##_end_ ; -- i)
#define Set(a , b) memset(a , b , sizeof(a))
#define pb(a) push_back(a)
#define mp(a, b) make_pair(a, b)
#define ALL(a) (a).begin(), (a).end()
#define SZ(a) ((int)(a).size())
#define fir first
#define sec second
#define INF (0x3f3f3f3f)
#define INF1 (2139062143)
#define Mod (1000000007)
#ifdef hany01
#define debug(...) fprintf(stderr , __VA_ARvctS__)
#else
#define debug(...)
#endiftemplate <typename T> inline bool chkmax(T &a , T b) { return a < b ? (a = b , 1) : 0; }
template <typename T> inline bool chkmin(T &a , T b) { return b < a ? (a = b , 1) : 0; }int _ , __;
char c_;
inline int read()
{for (_ = 0 , __ = 1 , c_ = getchar() ; !isdigit(c_) ; c_ = getchar()) if (c_ == '-') __ = -1;for ( ; isdigit(c_) ; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48);return _ * __;
}inline void File()
{
#ifdef hany01freopen("phalanx.in" , "r" , stdin);freopen("phalanx.out" , "w" , stdout);
#endif
}const int maxn = 300003, maxm = 10000003;int n, m, q, lc[maxm], rc[maxm], s[maxm], N, rt[maxn], cnt;
ll tmp;
vector<ll> vct[maxn];ll qry(int l, int r, int t, int rnk)
{if (l == r) return l;register int mid = (l + r) >> 1;int res = mid - l + 1 - s[lc[t]];if (res >= rnk) return qry(l, mid, lc[t], rnk);return qry(mid + 1, r, rc[t], rnk - res);
}void upd(int l, int r, int &t, int tmp)
{if (!t) t = ++ cnt;++ s[t];if (l == r) return ;register int mid = (l + r) >> 1;if (mid >= tmp) upd(l, mid, lc[t], tmp); else upd(mid + 1, r, rc[t], tmp);
}inline ll del_line(int x, int y)
{register ll tmp = qry(1, N, rt[x], y);upd(1, N, rt[x], tmp);return tmp < m ? (x - 1) * 1ll * m + tmp : vct[x][tmp - m];
}inline ll del_row(int x)
{register ll tmp = qry(1, N, rt[n + 1], x);upd(1, N, rt[n + 1], tmp);return tmp <= n ? tmp * 1ll * m : vct[n + 1][tmp - n - 1];
}int main()
{File();n = read(); m = read(); q = read(); N = max(n, m) + q;while (q --){register int x, y;x = read(); y = read();if (y == m) tmp = del_row(x), vct[n + 1].pb(tmp), printf("%lld\n", tmp);else {tmp = del_line(x, y), vct[n + 1].pb(tmp);printf("%lld\n", tmp);tmp = del_row(x), vct[x].pb(tmp);}}return 0;
}
//今朝郡斋冷,忽念山中客。
//涧底束荆薪,归来煮白石。
//欲恃一瓢酒,远慰风雨夕。
//落叶满空山,何处寻行迹。
//--韦应物《寄全椒山中道士》

NOIP 2017 列队 (线段树动态开点)相关推荐

  1. HDU - 6183 暴力,线段树动态开点,cdq分治

    B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...

  2. 线段树动态开点区间加区间求和

    线段树动态开点区间加区间求和 题目来源: 陕西师范大学第七届程序设计竞赛网络同步赛 H. 万恶的柯怡 思想: 保证叶子节点被完整的覆盖,需要开节点,就把左右儿子都开出来,其余和普通线段树一样. tip ...

  3. ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】

    描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...

  4. 【题解】有便便的厕所(权值线段树动态开点模板题)

    我只是来填坑的. 关于权值线段树的更多有关内容见此. 题面 题目描述 众所周知, GM \texttt{GM} GM 家的狗特别喜欢拉便便. GM \texttt{GM} GM 为了方便它方便,在家里 ...

  5. Codeforces Round #737 (Div. 2) D. Ezzat and Grid 线段树动态开点

    传送门 文章目录 题意: 思路: 题意: 思路: 比较套路的一个题,我们维护一个dp[i]dp[i]dp[i]表示到了第iii行能保留的区间最多是多少. 转移比较明显:dp[i]=max(dp[j]) ...

  6. BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)

    传送门 完了今天才知道原来线段树的动态开点和主席树是不一样的啊 我们先考虑没有宗教信仰的限制,那么就是一个很明显的树剖+线段树,路径查询最大值以及路径和 然后有了宗教信仰的限制该怎么做呢? 先考虑暴力 ...

  7. HDU - 5709 Claris Loves Painting 线段树动态开点+合并

    题目链接:https://cn.vjudge.net/problem/HDU-5709 题意:给定一棵n点的树,每个节点上有一个颜色,每次询问一个点的子树中与这个点距离不超过d的点的颜色有多少种 题解 ...

  8. 线段树动态开点 - - - > 线段树合并

    逆序对 代码 P3224 [HNOI2012]永无乡 并查集+线段树合并       ​​​​ 代码 P5494 [模板]线段树分裂 #include<iostream> #include ...

  9. 权值线段树+动态开点(学习小结)

    首先先上一道板题:把它看懂就OK了,其实这个跟普通的线段树也没太大区别,就是存的是出现的次数. CODE #include<algorithm> #include<cstdio> ...

  10. BZOJ4012[HNOI2015]开店——树链剖分+可持久化线段树/动态点分治+vector

    题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现她们面临着一个 ...

最新文章

  1. 根据搜索来路 弹出相应广告
  2. R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)
  3. sentry日志管理系统安装以及使用教程
  4. 生成删除约束语句 SQL语句
  5. php 获取所有下周1,用php获取本周,下周,本月,下月,本季度日期(摘)
  6. Vue 3 —— 当 data 和 ref 相同时 运行时错误 [ReferenceError: xxx is not defined]
  7. 你的IP地址是不是经常被发现
  8. 使用SecureCrt远程登录Linux安装配置教程
  9. 带彩色字体的man pages(debian centos)
  10. Linux包含一个名称是()的调试程序,开发一个 Linux 调试器(九):处理变量
  11. 《中国人工智能学会通讯》——7.7 结束语
  12. java语言函数存储在哪个包_java专项联系题
  13. 侯捷推荐的C++书单
  14. vue封装echarts示例
  15. 如何在WP7中实时监控内存使用量
  16. python玩转单片机_Python玩转单片机:从基础到进阶,几款主流的开发板大盘点!...
  17. 【ArcGIS】去除影像黑边的几种方法
  18. Python学习week4
  19. 文心一言的魔性作图,我愣住了……
  20. 【论文笔记】:CornerNet: Detecting Objects as Paired Keypoints

热门文章

  1. word怎么去掉页眉和页脚
  2. 给最真的自己加上static final
  3. 前加加与后加加(自增)
  4. java导出pdf 含图片_【Java】itext根据模板生成pdf(包括图片和表格)
  5. 怎样清理xp系统垃圾
  6. 计算机常用的信息表示方法,计算机中信息的表示
  7. ghost linux 黑屏,Ghost 与 Linux 的兼容性
  8. 华南师大考研旅游管理系2010-2016年分数线汇总
  9. 安卓adb push图片到相册后刷新相册(Mac版)
  10. 程序员的未来之路[转]