bzoj2762 [JLOI2011]不等式组 树状数组

版权声明:虽然是个蒟蒻但是转载还是要说一声的哟 https://blog.csdn.net/jpwang8/article/details/82736196

Description


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

20%的数据, N<=1000;
40%的数据, N<=10000;
100%的数据,N<=100000,
a,b,c的范围为[-10^8,10^8],k的范围为[-10^6,10^6]。

Solution


心态崩了,写道水题压压惊

注意到我们可以把不等式变形得到x的范围,然后相当于区间加和单点查询了

Code


#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define lowbit(x) ((x)&(-(x)))

const int INF=2000001;
const int N=100005;

struct Q {
    int l,r;
} q[N];

int c[INF*2+5],qCnt;

bool del[N];

int read() {
    int x=0,v=1; char ch=getchar();
    for (;ch<'0'||ch>'9';v=(ch=='-')?(-1):(v),ch=getchar());
    for (;ch<='9'&&ch>='0';x=x*10+ch-'0',ch=getchar());
    return x*v;
}

void add(int x,int v) {
    for (;x<=INF;x+=lowbit(x)) c[x]+=v;
}

int get(int x) {
    int ret=0;
    for (;x;x-=lowbit(x)) ret+=c[x];
    return ret;
}

void change(int l,int r,int v) {
    if (r<l) return ;
    l=std:: max(l,1),r=std:: min(r,INF);
    add(l,v); add(r+1,-v);
}

int main(void) {
    // freopen("data.in","r",stdin);
    // freopen("myp.out","w",stdout);
    for (int T=read();T--;) {
        char opt=getchar(); for (;opt!='A'&&opt!='D'&&opt!='Q';opt=getchar());
        if (opt=='A') {
            int a=read(),b=read(),c=read(),l,r;
            if (a<0) {
                l=1,r=ceil((double)(c-b)/a)+1000000;
            } else if (a>0) {
                l=floor((double)(c-b)/a)+1000002; r=INF;
            } else if (b>c) {
                l=1; r=INF; 
            } else{ l=2; r=1; }
            q[++qCnt].l=l; q[qCnt].r=r;
            change(l,r,1);
        } else if (opt=='D') {
            int x=read();
            if (!del[x]) {
                del[x]=true;
                change(q[x].l,q[x].r,-1);
            }
        } else if (opt=='Q') {
            int x=read(); printf("%d\n", get(x+1000001));
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/jpwang8/article/details/82736196
今日推荐