旺汪与旺喵最近在做一些不等式的练习。这些不等式都是形如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]。

——————————————————————————————————

这道题有毒QAQ 感觉大佬博客提醒 神犇传送门

这题一堆坑点

1. a可能为0 那么这个时候如果b>c那么x取任意值都有解 否则无解

2. x有两种形式 x>y 或者 x<y

分类讨论之后 x>y的形式为 x>=floor(y)+1 x<y的形式为 x<=ceil(y)-1 这里不要加EPS否则就gg了QAQ

3.x的取值范围可能超过[-1000000,1000000]

4.由于有负数 所以区间修改时左右端点都要加上1000001 若加上1000000则死循环

5.很坑的一点是数据虽然说保证合法但是我们可以无视这句话了…… 有重复删除的不等式 需要记录

那么这些细节处理完之后就是简单的差分辣

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
const int mx=1e6;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,cnt,f[mx];
int s[mx<<|0xffff];
struct pos{int l,r;}q[mx];
char ch[];
pos find(int a,int b,int c){
if(!a){
if(b>c) return (pos){-mx,mx};
else return (pos){,};
}
else if(a>){
int p=floor(double(c-b)/a+);
if(p<-mx) return (pos){-mx,mx};
else if(p>mx) return (pos){,};
return (pos){p,mx};
}
else{
int p=ceil(double(c-b)/a-);
if(p>mx) return (pos){-mx,mx};
else if(p<-mx) return (pos){,};
return (pos){-mx,p};
}
}
int a,b,c;
#define lowbit(x) x&-x
void ins(int x,int v){while(x<=mx*+) s[x]+=v,x+=lowbit(x);}
int query(int x){
int sum=;
while(x) sum+=s[x],x-=lowbit(x);
return sum;
}
void modify(pos x,int s){ins(x.l++mx,s);ins(x.r++mx,-s);}
int main(){
n=read();
for(int i=;i<=n;i++){
scanf("%s",ch);
if(ch[]=='A'){
a=read(); b=read(); c=read();
q[++cnt]=find(a,b,c);
modify(q[cnt],);
}
else if(ch[]=='Q') b=read(),printf("%d\n",query(b+mx+));
else if(ch[]=='D'){
b=read(); if(f[b]) continue;
f[b]=; modify(q[b],-);
}
}
return ;
}

bzoj 2762: [JLOI2011]不等式组——树状数组的更多相关文章

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

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

  2. BZOJ 2762: [JLOI2011]不等式组( 平衡树 )

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

  3. BZOJ 1901 Zju2112 Dynamic Rankings ——树状数组套主席树

    [题目分析] BZOJ这个题目抄的挺霸气. 主席树是第一时间想到的,但是修改又很麻烦. 看了别人的题解,原来还是可以用均摊的思想,用树状数组套主席树. 学到了新的姿势,2333o(* ̄▽ ̄*)ブ [代 ...

  4. Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对

    题目:http://codevs.cn/problem/3286/ 3286 火柴排队  2013年NOIP全国联赛提高组  时间限制: 1 s   空间限制: 128000 KB   题目等级 : ...

  5. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  6. BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]

    题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...

  7. BZOJ.4826.[AHOI/HNOI2017]影魔(树状数组/莫队 单调栈)

    BZOJ LOJ 洛谷 之前看\(mjt\)用莫队写了,以为是一种正解,码了3h结果在LOJ T了没A= = 心态爆炸(upd:发现是用C++11(NOI)交的,用C++11交就快一倍了...) 深刻 ...

  8. bzoj 3262 陌上花开 - CDQ分治 - 树状数组

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  9. bzoj 2527 Meteors - 整体二分 - 树状数组

    Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...

随机推荐

  1. android入门 — ListView

    ListView主要是用来解决大量数据展示的问题,它的用途很广泛,几乎所有的app都会用到,比如说知乎.今日头条.微博.通讯录等. ListView允许用户通过上下滑动的方式将屏幕外的数据滚动到屏幕中 ...

  2. 全排列 next_permutation() 函数的用法

    在头文件<algorithm>里面有如下代码: int a[]; do { } while(next_permutation(a,a+n)); 可产生1~n的全排列有如下代码: #incl ...

  3. iOS- 给App添加内购& 验证购买iOS7新特性

    1.内购——应用内购买 我所说的内购——也可以说是应用内购买 大家都知道通过苹果应用程序商店有三种主要赚钱的方式: 1.直接收费(与国内大部分用户的消费习惯相悖,如果要收费,直接收高的,别收6块钱) ...

  4. 基于3D卷积神经网络的人体行为理解(论文笔记)(转)

    基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...

  5. 制作QQ微信支付宝三合一收款码

    转载:http://blog.mambaxin.com/article/56 发现很多博客都带了打赏功能,虽说打赏的人可能很少,但始终是一份心意,能让博主知道自己写的文章有用,能够帮助到人.所以,我也 ...

  6. [OS] 信号量(Semaphore)

    一个信号量S是一个整型量,除对其初始化外,它只能由两个原子操作P和V来访问.P和V的名称来源于荷兰文proberen(测试)和verhogen(增量),后面亦将P/V操作分别称作wait(), sig ...

  7. jsp文件过大,is exceeding 65535 bytes limit

    今天修改配置项的时候,遇到了一个异常,Generated servlet error:The code of method _jspService(HttpServletRequest, HttpSe ...

  8. JVM启动参数详解 (转)

    非标准参数 非标准参数又称为扩展参数,其列表如下: -Xint  设置jvm以解释模式运行,所有的字节码将被直接执行,而不会编译成本地码.   -Xbatch  关闭后台代码编译,强制在前台编译,编译 ...

  9. BZOJ 1791 岛屿(环套树+单调队列DP)

    题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...

  10. BZOJ3922 Karin的弹幕 【线段树】

    题目链接 BZOJ3922 题解 考虑暴力,修改\(O(1)\),查询\(O(\frac{n}{d})\) 考虑线段树,如果对每种差值建一棵线段树,修改\(O(nlogn)\),查询\(O(logn) ...