【BZOJ 3165】【HEOI 2013】Segment
往区间上覆盖一次函数,做法是用线段树维护标记永久化。
每次都忘了线段树要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的更多相关文章
- 【BZOJ 3166】【HEOI 2013】Alo
http://www.lydsy.com/JudgeOnline/problem.php?id=3166 这道题难点在于求能对一个次大值有贡献的区间. 设这个次大值为\(a_i\),\(a_i\)左边 ...
- 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...
- 【BZOJ】【3170】【TJOI2103】松鼠聚会
切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】【2084】【POI2010】Antisymmetry
Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
随机推荐
- 移动前端UI选择
移动前端UI选择 目录 三.SUI Mobile 一.jQuery Mobile jQuery Mobile 是jQuery在移动设备上的版本,做为主要针对移动设备的框架来说,它提供一个移动设备平 ...
- jmeter jdbc request使用详解
1.在使用 jdbc request之前需要加载一个jar包 在test plan中将jar包引入到classpath中 2.创建一个JDBC Connection Configuration Var ...
- 在ubuntu14.04设置静态ip
打开网络的配置文件 sudo vim /etc/network/interfaces 选择网卡,我这里是有线网卡eth0,设置静态ip为192.168.1.108 auto eth0 iface et ...
- [No00003D]操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock
操作系统Operating Systems信号量的代码实现Coding Semaphore &死锁处理Deadlock 可以操刀了—从纸上到实际 从Linux 0.11 那里学点东西… 读磁盘 ...
- 已Access为支持,书写一个C#写入的记录的方案
/// <summary> /// 读取Excel文档 /// </summary> /// <param name="Path">文件名称 ...
- Eclipse调整双击选取的字符颜色背景
Eclipse调整双击选取的字符颜色背景,如下图所示: 会有二点影响: 1. 编辑页的颜色 2. 右侧滚动条的小提示点的颜色.
- linux进入软连接所指向的原目录
软连接就是一个快捷方式,建立软连接的方法 ln -s source-path-or-file link-file 建立硬连接 ln source-path-or-file link-file linu ...
- js物理弹性窗口
js物理弹性窗口 点击下载代码
- Win7安装Redis
首先, 到 https://github.com/MSOpenTech/redis/releases 下载Redis的windows 64bit port zip 解压后放到某个目录下, 例如 c:\ ...
- MySql MyISAM和InnoDB的区别
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...