【BZOJ2762】[JLOI2011]不等式组 树状数组
【BZOJ2762】[JLOI2011]不等式组
Description
Input
Output
Sample Input
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
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]。
题解: 一元一次不等式怎么解?移个项就完事了~但是a可能是正数也可能是负数,所以要分两种情况讨论,然后不等式就变成了x>...或x<...,变成x>=...+eps或x<=...-eps,这样的话就能直接用树状数组了。
但是树状数组的下标可能是负数,那么就将下边全都+=1000002;虽然x在[-1e6,1e6]之间,但是不等式右边不一定是,那么将超过这个范围的都用极小(大)值表示即可。
还有,a可能等于0,特判掉即可。
最后,可能出现重复删除的情况。。。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=100010;
int n,m,sum,ok;
struct node
{
int val,org;
node() {}
node(int _1,int _2) {val=_1,org=_2;}
}p[maxn];
char str[10];
int op[maxn],v[maxn],flag[maxn],vis[maxn];
struct BIT
{
int s[2000010];
inline void updata(int x,int val)
{
if(x>1000000) x=2000003;
else if(x<-1000000) x=1;
else x+=1000002;
for(int i=x;i<=2000003;i+=i&-i) s[i]+=val;
}
inline int query(int x)
{
x+=1000002;
int i,ret=0;
for(i=x;i;i-=i&-i) ret+=s[i];
return ret;
}
}s1,s2;
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
bool cmp(const node &a,const node &b)
{
return a.val<b.val;
}
int main()
{
n=rd();
int i,j,a,b,c;
for(i=1,j=0;i<=n;i++)
{
scanf("%s",str);
if(str[0]=='A')
{
a=rd(),b=rd(),c=rd(),j++;
if(a>0) flag[j]=1,v[j]=ceil((double)(c-b)/a+1e-8),s1.updata(v[j],1);
if(a<0) flag[j]=-1,v[j]=floor((double)(c-b)/a-1e-8),s2.updata(v[j],1),sum++;
if(!a) flag[j]=0,v[j]=(b>c),ok+=v[j];
}
if(str[0]=='D')
{
a=rd();
if(vis[a]) continue;
vis[a]=1;
if(flag[a]==1) s1.updata(v[a],-1);
if(flag[a]==-1) s2.updata(v[a],-1),sum--;
if(!flag[a]) ok-=v[a];
}
if(str[0]=='Q')
{
a=rd(),printf("%d\n",s1.query(a)+sum-s2.query(a-1)+ok);
}
}
return 0;
}//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
【BZOJ2762】[JLOI2011]不等式组 树状数组的更多相关文章
- bzoj 2762: [JLOI2011]不等式组——树状数组
旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪.旺喵给出一组一元不等式,并给出一个数值 .旺汪需要回答 ...
- Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对
题目:http://codevs.cn/problem/3286/ 3286 火柴排队 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : ...
- 【BZOJ2762】[JLOI2011]不等式组(树状数组)
题目: BZOJ2762 分析: 加入的不等式分三种情况 当\(a>0\),可以变成\(x>\lfloor \frac{c-b}{a}\rfloor\) 当\(a=0\),若\(b> ...
- NOIP2013 提高组day2 2 花匠 动规 找拐点 树状数组
花匠 描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 【做题记录】 [JLOI2011]不等式组
P5482 [JLOI2011]不等式组 超烦人的细节题!(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线). 树状数组的下标是:所有可能出现的数据进行离散化之后的值. 其含义为 ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- UVALive 6911---Double Swords(贪心+树状数组(或集合))
题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- HDU1559 最大子矩阵 (二维树状数组)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others) ...
随机推荐
- 用C++实现Huffman文件编码和解码(2 总结)
这个是代码是昨天写完的,一开始的时候还出了点小bug,这个bug在晚上去吃饭的路上想明白的,回来更改之后运行立刻完成最后一步,大获成功. 简单说下huffman编码和文件压缩主要的技术. Huffma ...
- 文档对象模型-DOM(二)
从NodeList中选择元素 方法一:item()方法,用于返回其中的单一节点,需要在方法的参数中指定所需元素的索引编号. 当其中没有任何元素时,执行代码是对资源的浪费.因此程序员会在执行代码之前,先 ...
- Win7如何查看自己得Win7版本号
如何查看Windows 7详细系统版本号? --Windows 7系统知识100问之七十一 责任编辑:姜惠田作者:IT168 老姜 2009-08-05 前言:微软新一代操作系统Windows 7 ...
- jQuery (样式篇)
1.$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码,因为我们在执行代码的时候,可能会依赖页面的某一个元素,我们要确保这个元素真正的的 ...
- 用jQuery和PHP来实现转盘抽奖程序
准备工作 首先要准备素材,抽奖的界面用到两张图片,圆盘图片和指针图片,实际应用中可以根据不同的需求制作不同的圆盘图片. 接着制作html页面,实例中我们在body中加入如下代码: <div cl ...
- EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
public static DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate< ...
- 安卓开发之玩美解决ADT和SDK不一致问题
提示:This Android SDK requires Android Developer Toolkit version 21.1.0 or above. Current version is ...
- Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)
Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university ...
- html5在移动端的屏幕适应性问题
html5在移动端的屏幕适应性问题 Html5 以前是最最炙手可热的技术.移动端也由于html5技术的增加变得更加变通一些.人人都喜欢"Write once.run more",但 ...
- Any、AnyObject、as
Swift中添加了两种类型别名 Any:可表示随意类型,(Int.Double等值类型). AnyObject:可表示随意class类型实例, 一个不论什么对象类型的数组 Any类型: class C ...