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

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

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int p = 39989;
int read(int &k) {
k = 0; int fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 1) + (k << 3) + c - '0';
k = k * fh;
}
struct node {
double k, b; int id;
node (int xa = 0, int ya = 0, int xb = 0, int yb = 0, int num = 0) {
id = num;
if (xa == xb) {k == 0; b = max(ya, yb);}
else {k = (double) (ya - yb) / (xa - xb); b = ya - xa * k;}
}
double get(int x) {return k * x + b;}
};
bool lessthan(node A, node B, int x) {
if (A.k == B.k) {return A.b < B.b;}
double a = A.get(x), b = B.get(x);
return a == b ? A.id < B.id : a < b;
} node T[160003];
node Q(int rt, int l, int r, int pos) {
if (l == r) return T[rt];
int mid = (l + r) >> 1;
node tmp = (pos <= mid) ? Q(rt << 1, l, mid, pos) : Q(rt << 1 | 1, mid + 1, r, pos);
return lessthan(T[rt], tmp, pos) ? tmp : T[rt];
}
void ins2(int rt, int l, int r, node se) {
if (!T[rt].id) {T[rt] = se; return;}
if (lessthan(T[rt], se, l)) swap(T[rt], se);
if (l == r || T[rt].k == se.k) return;
double x = (T[rt].b - se.b) / (se.k - T[rt].k); int mid = (l + r) >> 1;
if (x < l || x > r) return;
if (x <= mid) ins2(rt << 1, l, mid, T[rt]), T[rt] = se; else ins2(rt << 1 | 1, mid + 1, r, se);
}
void ins1(int rt, int l, int r, int L, int R, node se) {
if (L <= l && r <= R) {ins2(rt, l, r, se); return;}
int mid = (l + r) >> 1;
if (L <= mid) ins1(rt << 1, l, mid, L, R, se);
if (R > mid) ins1(rt << 1 | 1, mid + 1, r, L, R, se);
} int t, la = 0, k, opt, xa, xb, ya, yb, cnt = 0;
int main() {
read(t);
for(; t; --t) {
read(opt);
if (opt == 0) {
read(k); k = (k + la - 1) % p + 1;
printf("%d\n", la = Q(1, 1, p, k).id);
} else {
read(xa); read(ya); read(xb); read(yb);
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;
if (xa > xb) swap(xa, xb), swap(ya, yb);
ins1(1, 1, p, xa, xb, node(xa, ya, xb, yb, ++cnt));
}
}
return 0;
}

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. 第64课 C++中的异常处理(上)

    1. C++内置的异常处理:try-catch (1)try语句处理正常代码逻辑 (2)catch语句处理异常情况 (3)try语句中的异常由对应的catch语句处理,如果对应的catch中没有处理该 ...

  2. Sphinx和coreseek检索引擎

    Sphinx是检索英文用,coreseek是检索中文用. Sphinx(斯芬克斯)是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索 ...

  3. maven-安装配置

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. maven是什么maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行” ...

  4. poj[2392]space elevator

    Description The cows are going to space! They plan to achieve orbit by building a sort of space elev ...

  5. Oracle 行转列,列转行

    一.行转列1.1.初始测试数据表结构:TEST_TB_GRADESql代码:1    create table TEST_TB_GRADE2    (3      ID        NUMBER(1 ...

  6. iOS多线程之GCD详解

    GCD(Grand Central Dispatch)是基于C语言开发的一套多线程开发机制.也是目前苹果官方推荐的多线程开发方法.iOS三种多线程开发中GCD是抽象层次最高的.当然用起来也是最简单的. ...

  7. 获取assemblies信息in .net core

    using System; using System.Linq; using System.Reflection; using System.Runtime.Loader; using Microso ...

  8. Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...

  9. javascript中的链表结构

    1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...

  10. Java Web开发Tomcat中三种部署项目的方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...