往区间上覆盖一次函数,做法是用线段树维护标记永久化。

每次都忘了线段树要4倍空间,第一次交总是RE,再这么手残的话考场上就真的要犯逗了。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int p = 39989;
  6. int read(int &k) {
  7. k = 0; int fh = 1; char c = getchar();
  8. for(; c < '0' || c > '9'; c = getchar())
  9. if (c == '-') fh = -1;
  10. for(; c >= '0' && c <= '9'; c = getchar())
  11. k = (k << 1) + (k << 3) + c - '0';
  12. k = k * fh;
  13. }
  14. struct node {
  15. double k, b; int id;
  16. node (int xa = 0, int ya = 0, int xb = 0, int yb = 0, int num = 0) {
  17. id = num;
  18. if (xa == xb) {k == 0; b = max(ya, yb);}
  19. else {k = (double) (ya - yb) / (xa - xb); b = ya - xa * k;}
  20. }
  21. double get(int x) {return k * x + b;}
  22. };
  23. bool lessthan(node A, node B, int x) {
  24. if (A.k == B.k) {return A.b < B.b;}
  25. double a = A.get(x), b = B.get(x);
  26. return a == b ? A.id < B.id : a < b;
  27. }
  28.  
  29. node T[160003];
  30. node Q(int rt, int l, int r, int pos) {
  31. if (l == r) return T[rt];
  32. int mid = (l + r) >> 1;
  33. node tmp = (pos <= mid) ? Q(rt << 1, l, mid, pos) : Q(rt << 1 | 1, mid + 1, r, pos);
  34. return lessthan(T[rt], tmp, pos) ? tmp : T[rt];
  35. }
  36. void ins2(int rt, int l, int r, node se) {
  37. if (!T[rt].id) {T[rt] = se; return;}
  38. if (lessthan(T[rt], se, l)) swap(T[rt], se);
  39. if (l == r || T[rt].k == se.k) return;
  40. double x = (T[rt].b - se.b) / (se.k - T[rt].k); int mid = (l + r) >> 1;
  41. if (x < l || x > r) return;
  42. if (x <= mid) ins2(rt << 1, l, mid, T[rt]), T[rt] = se; else ins2(rt << 1 | 1, mid + 1, r, se);
  43. }
  44. void ins1(int rt, int l, int r, int L, int R, node se) {
  45. if (L <= l && r <= R) {ins2(rt, l, r, se); return;}
  46. int mid = (l + r) >> 1;
  47. if (L <= mid) ins1(rt << 1, l, mid, L, R, se);
  48. if (R > mid) ins1(rt << 1 | 1, mid + 1, r, L, R, se);
  49. }
  50.  
  51. int t, la = 0, k, opt, xa, xb, ya, yb, cnt = 0;
  52. int main() {
  53. read(t);
  54. for(; t; --t) {
  55. read(opt);
  56. if (opt == 0) {
  57. read(k); k = (k + la - 1) % p + 1;
  58. printf("%d\n", la = Q(1, 1, p, k).id);
  59. } else {
  60. read(xa); read(ya); read(xb); read(yb);
  61. xa = (xa + la - 1) % p + 1; xb = (xb + la - 1) % p + 1; ya = (ya + la - 1) % (int) 1E9 + 1; yb = (yb + la - 1) % (int) 1E9 + 1;
  62. if (xa > xb) swap(xa, xb), swap(ya, yb);
  63. ins1(1, 1, p, xa, xb, node(xa, ya, xb, yb, ++cnt));
  64. }
  65. }
  66. return 0;
  67. }

QwQ

【BZOJ 3165】【HEOI 2013】Segment的更多相关文章

  1. 【BZOJ 3166】【HEOI 2013】Alo

    http://www.lydsy.com/JudgeOnline/problem.php?id=3166 这道题难点在于求能对一个次大值有贡献的区间. 设这个次大值为\(a_i\),\(a_i\)左边 ...

  2. 【BZOJ 3165】 [Heoi2013]Segment 李超线段树

    所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...

  3. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

  4. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  5. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  6. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  7. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  8. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  9. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

随机推荐

  1. 移动前端UI选择

    移动前端UI选择 目录 三.SUI Mobile   一.jQuery Mobile jQuery Mobile 是jQuery在移动设备上的版本,做为主要针对移动设备的框架来说,它提供一个移动设备平 ...

  2. jmeter jdbc request使用详解

    1.在使用 jdbc request之前需要加载一个jar包 在test plan中将jar包引入到classpath中 2.创建一个JDBC Connection Configuration Var ...

  3. 在ubuntu14.04设置静态ip

    打开网络的配置文件 sudo vim /etc/network/interfaces 选择网卡,我这里是有线网卡eth0,设置静态ip为192.168.1.108 auto eth0 iface et ...

  4. [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock

    操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...

  5. 已Access为支持,书写一个C#写入的记录的方案

      /// <summary> /// 读取Excel文档 /// </summary> /// <param name="Path">文件名称 ...

  6. Eclipse调整双击选取的字符颜色背景

    Eclipse调整双击选取的字符颜色背景,如下图所示: 会有二点影响: 1. 编辑页的颜色 2. 右侧滚动条的小提示点的颜色.

  7. linux进入软连接所指向的原目录

    软连接就是一个快捷方式,建立软连接的方法 ln -s source-path-or-file link-file 建立硬连接 ln source-path-or-file link-file linu ...

  8. js物理弹性窗口

    js物理弹性窗口 点击下载代码

  9. Win7安装Redis

    首先, 到 https://github.com/MSOpenTech/redis/releases 下载Redis的windows 64bit port zip 解压后放到某个目录下, 例如 c:\ ...

  10. MySql MyISAM和InnoDB的区别

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...