对不等式变形..然后就是维护一些数, 随便找个数据结构都能写吧....用double感觉会有精度误差, 分类讨论把<改成<=了很久后弃疗了, 自己写了个分数体....然后速度就被完爆了..

------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 100009;
 
int N, ans, n;
char s[10];
 
struct F {
int a, b;
F(int _a = 0, int _b = 0) : a(_a), b(_b) {
if(b < 0)
a = -a, b = -b;
}
bool operator < (const F &t) const {
ll e = ll(a) * b, f = ll(t.a) * t.b;
if(!e) return f > 0;
if(!f) return e < 0;
if(e > 0 && f < 0) return false;
if(e < 0 && f > 0) return true;
return ll(a) * t.b < ll(b) * t.a;
}
bool operator == (const F &t) const {
return ll(a) * t.b == ll(b) * t.a;
}
};
 
struct O {
int t;
F v;
O(int _t = 0, F _v = F()) : t(_t), v(_v) {
}
} o[maxn];
 
struct Node {
Node* ch[2];
int sz, r;
F f;
inline void upd() {
sz = ch[0]->sz + ch[1]->sz + 1;
}
} pool[maxn], *pt, *Null, *Rt[2];
 
void Init_Treap() {
pt = pool;
Null = pt++;
Null->ch[0] = Null->ch[1] = Null;
Null->sz = 0;
Rt[0] = Rt[1] = Null;
}
 
Node* newNode(F v) {
pt->f = v;
pt->sz = 1;
pt->r = rand();
pt->ch[0] = pt->ch[1] = Null;
return pt++;
}
 
void Rotate(Node*&t, int d) {
Node* o = t->ch[d ^ 1];
t->ch[d ^ 1] = o->ch[d];
o->ch[d] = t;
t->upd(), o->upd();
t = o;
}
 
void Insert(Node*&t, F v) {
if(t == Null) {
t = newNode(v);
} else {
int d = (t->f < v);
Insert(t->ch[d], v);
if(t->ch[d]->r > t->r)
Rotate(t, d ^ 1);
}
t->upd();
}
 
void Delete(Node*&t, F v) {
int d = (v == t->f ? -1 : (t->f < v));
if(d == -1) {
if(t->ch[0] != Null && t->ch[1] != Null) {
int _d = (t->ch[0]->r > t->ch[1]->r);
Rotate(t, _d);
Delete(t->ch[_d], v);
} else {
t = (t->ch[0] != Null ? t->ch[0] : t->ch[1]);
}
} else {
Delete(t->ch[d], v);
}
if(t != Null) t->upd();
}
 
int Query(F v) {
int ret = 0;
for(Node* t = Rt[0]; t != Null; ) if(t->f < v) {
ret += t->ch[0]->sz + 1;
t = t->ch[1];
} else
t = t->ch[0];
for(Node* t = Rt[1]; t != Null; ) if(v < t->f) {
ret += t->ch[1]->sz + 1;
t = t->ch[0];
} else 
t = t->ch[1];
return ret;
}
 
int main() {
scanf("%d", &N);
ans = n = 0;
Init_Treap();
while(N--) {
scanf("%s", s);
if(s[0] == 'A') {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
c -= b;
if(!a) {
ans += (c < 0);
o[n++] = O(0, F(0, c < 0));
} else {
Insert(Rt[a < 0], F(c, a));
o[n++] = O(a < 0 ? -1 : 1, F(c, a));
}
} else if(s[0] == 'D') {
int t;
scanf("%d", &t), t--;
if(o[t].t < -1)
continue;
if(!o[t].t) {
ans -= o[t].v.b;
} else {
o[t].t > 0 ? Delete(Rt[0], o[t].v) : Delete(Rt[1], o[t].v);
}
o[t].t = -2;
} else {
int t;
scanf("%d", &t);
printf("%d\n", ans + Query(F(t ,1)));
}
}
return 0;
}

------------------------------------------------------------------------------

2762: [JLOI2011]不等式组

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 714  Solved: 205
[Submit][Status][Discuss]

Description

旺汪与旺喵最近在做一些不等式的练习。这些不等式都是形如ax+b>c 的一元不等式。当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪。旺喵给出一组一元不等式,并给出一个数值 。旺汪需要回答的是x=k 时成立的不等式的数量。聪明的旺汪每次都很快就给出了答案。你的任务是快速的验证旺汪的答案是不是正确的。
 

Input

输入第一行为一个正整数 ,代表接下来有N 行。
接下来每一行可能有3种形式:
1.“Add a b c”,表明要往不等式组添加一条不等式ax+b>c ;
2.“Del i”,代表删除第i 条添加的不等式(最先添加的是第1条)。
3.“Query k”,代表一个询问,即当x=k 时,在当前不等式组内成立的不等式的数量。
注意一开始不等式组为空,a,b,c,i,k 均为整数,且保证所有操作均合法,不会出现要求删除尚未添加的不等式的情况。
 

Output

 
对于每一个询问“Query k”,输出一行,为一个整数,代表询问的答案。

Sample Input

9
Add 1 1 1
Add -2 4 3
Query 0
Del 1
Query 0
Del 2
Query 0
Add 8 9 100
Query 10

Sample Output

1
1
0
0

HINT

第1条添加到不等式组的不等式为x+1>1 ,第2条为-2x+4>3 ,所以第1个询问的时候只有第2条不等式可以成立,故输出1。

然后删除第1条不等式,再询问的时候依然是只有第2条不等式可以成立,故输出1。

再删除第2条不等式后,因为不等式组里面没有不等式了,所以没有不等式可以被满足,故输出0。

继续加入第3条不等式8x+9>100 ,当x=k=10时有8*10+9=89<100,故也没有不等式可以被满足,依然输出0。

数据范围:

20%的数据, N<=1000;

40%的数据, N<=10000;

100%的数据,N<=100000,

a,b,c的范围为[-10^8,10^8],k的范围为[-10^6,10^6]。

Source

BZOJ 2762: [JLOI2011]不等式组( 平衡树 )的更多相关文章

  1. bzoj 2762: [JLOI2011]不等式组——树状数组

    旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪.旺喵给出一组一元不等式,并给出一个数值 .旺汪需要回答 ...

  2. 【BZOJ2762】[JLOI2011]不等式组 树状数组

    [BZOJ2762][JLOI2011]不等式组 Description 旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了, ...

  3. 【做题记录】 [JLOI2011]不等式组

    P5482 [JLOI2011]不等式组 超烦人的细节题!(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线). 树状数组的下标是:所有可能出现的数据进行离散化之后的值. 其含义为 ...

  4. 【BZOJ2762】[JLOI2011]不等式组(树状数组)

    题目: BZOJ2762 分析: 加入的不等式分三种情况 当\(a>0\),可以变成\(x>\lfloor \frac{c-b}{a}\rfloor\) 当\(a=0\),若\(b> ...

  5. 【Luogu】 P5482 [JLOI2011]不等式组 题解

    本来以为有多难,结果发现是道树状数组水题... 显然,对于每一个添加的不等式,有3种情况: \(a<0\) .此时可转换为 $x < {{a} \over {c-b}} $ . 但是,我们 ...

  6. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  7. BZOJ 2761: [JLOI2011]不重复数字 水题

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2100  Solved: 809 题目连接 http:// ...

  8. bzoj 2761 [JLOI2011]不重复数字(哈希表)

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3210  Solved: 1186[Submit][Sta ...

  9. BZOJ 2809 APIO 2012 dispatching 平衡树启示式合并

    题目大意:给出一棵树,每个节点有两个值,各自是这个忍者的薪水和忍者的领导力.客户的惬意程度是这个点的领导力乘可以取得人数.前提是取的人的薪水总和不超过总的钱数. 思路:仅仅能在子树中操作.贪心的想,我 ...

随机推荐

  1. java中文乱码解决之道(三)—–编码详情:伟大的创想—Unicode编码

    原文出处:http://cmsblogs.com/?p=1458 随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于 ...

  2. 警告框和操作表(IOS开发)

    警告框(AlertView)时模态的,不关闭它就不能做其它事情,所以不是下面几种情况不应该随便使用. 1.应用不能继续执行. 如内存不足,没有网络.一般仅仅须要一个button. 2.询问还有一个解决 ...

  3. 响应式内容滑动插件bxSlider

    bxSlider特性 1.充分响应各种设备,适应各种屏幕: 2.支持多种滑动模式,水平.垂直以及淡入淡出效果: 3.支持图片.视频以及任意html内容: 4.支持触摸滑动: 5.支持Firefox,C ...

  4. SharePoint 计时器服务无法启动

    摘要: Microsoft SharePoint Server 2010 使用 Windows SharePoint Services 定时 V4 (SPTimerV4) 服务运行大多数系统任务.服务 ...

  5. “entities.LastOrDefault()”引发了类型“System.NotSupportedException”的异常

    问题: var entities = new ShipuPlanBLO().UserList(userId, beginDate, endDate); DateTime maxDate = entit ...

  6. php正则的使用[替换,匹配]

    // 隐藏电话的中间四位 echo parseMobile('15836365252'); function parseMobile($mobile, $start = 4, $len = 4){ $ ...

  7. 使用javascript把图片转成base64位编码,然后传送到服务端(ajax调用的接口基于drupa7)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. WEB开发之如何改善PHP开发方式

    改善PHP开发方式一般可以分为以下几种实现方式: 1.组织和样式     找出一种适合你的组织方法和编码样式,并且一直坚持下去,这样的话,你的代码的组织和布局会变得十分有条理.我们不应该轻视代码的组织 ...

  9. 如何将js与HTML完全脱离

    先举出一个例子: var sound='Roar!'; function myOrneryBeast(){ alert(this); this.style.color='green';//this指代 ...

  10. JS知识点摘记(一)

    JavaScript:基于对象和事件的脚本语言 特点: 安全性:不允许直接访问本地硬盘,可做的就是信息的动态交互 跨平台性:只要可以解析JS的浏览器就可执行,与平台无关 JavaScript与Java ...