zoukankan      html  css  js  c++  java
  • HDU5032 Always Cook Mushroom(树状数组&&离线)

    树状数组+询问离线。一个优化是需要的,就是先对1000*1000个点先排序,而不是每次都生成这1000*1000个点然后和询问一起排序,那样会tle.

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    #define maxn 1200
    #define ll long long
    
    ll A,B;
    
    struct Node
    {
        ll a,b;
        int t;
        ll v;
        int id;
        bool operator < (const Node& y) const{
            if(b*y.a!=a*y.b) return b*y.a<a*y.b;
            else return t<y.t;
        }
    }x[120000],y[1005000];
    
    int tot,tot2;
    
    ll ans[200000];
    
    ll bit[maxn];
    
    void add(int i,ll v){
        while(i<=1000){
            bit[i]+=v;
            i+=i&(-i);
        }
    }
    
    ll sum(int i){
        ll ret=0;
        while(i>0){
            ret+=bit[i];
            i-=i&(-i);
        }
        return ret;
    }
    
    int main()
    {
        int T;cin>>T;int ca=0;
        tot2=0;
        for(int i=1;i<=1000;++i){
            for(int j=1;j<=1000;++j){
                y[tot2].a=i;y[tot2].b=j;
                y[tot2++].t=1;
            }
        }
        sort(y,y+tot2);
        while(T--){
            scanf("%I64d%I64d",&A,&B);
            tot=0;
            int m;scanf("%d",&m);
            int ai,bi,xi;
            for(int i=0;i<m;++i){
                scanf("%d%d%d",&ai,&bi,&xi);
                x[tot].a=ai;
                x[tot].b=bi;
                x[tot].id=i;
                x[tot].t=2;
                x[tot++].v=xi;
            }
    
            sort(x,x+tot);
            memset(bit,0,sizeof(bit));
            int id=0;
            for(int i=0;i<tot;++i){
                while(id<tot2&&y[id]<x[i]){
                    add(y[id].a,(y[id].a+A)*(y[id].b+B));
                    ++id;
                }
                ans[x[i].id]=sum(x[i].v);
            }
            printf("Case #%d:
    ",++ca);
            for(int i=0;i<m;++i){
                printf("%I64d
    ",ans[i]);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    jQuery插件开发——全屏切换插件
    原生JS实现全屏切换以及导航栏滑动隐藏及显示——修改
    CSS 3学习——animation动画
    CSS 3学习——transition 过渡
    CSS 3 学习——transform 3D转换渲染
    CSS 3学习——transform 2D转换
    消息过滤
    jms消息组成
    vim常用命令整理
    知识碎片
  • 原文地址:https://www.cnblogs.com/chanme/p/4065972.html
Copyright © 2011-2022 走看看