zoukankan      html  css  js  c++  java
  • Codeforces Beta Round #64D

    题意:两种操作1.加点2.查询点是否在之前给定点的凸包内
    题解:set维护动态凸包,分别维护上下凸壳,对y取反就行,判断点是否在凸壳内,把点加进去看要不要删除就好了

    //#pragma GCC optimize(2)
    //#pragma GCC optimize(3)
    //#pragma GCC optimize(4)
    //#pragma GCC optimize("unroll-loops")
    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define db double
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define vi vector<int>
    #define mod 1000000007
    #define ld long double
    //#define C 0.5772156649
    //#define ls l,m,rt<<1
    //#define rs m+1,r,rt<<1|1
    #define pll pair<ll,ll>
    #define pil pair<int,ll>
    #define pli pair<ll,int>
    #define pii pair<int,int>
    #define ull unsigned long long
    //#define base 1000000000000000000
    #define fin freopen("a.txt","r",stdin)
    #define fout freopen("a.txt","w",stdout)
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
    inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
    template<typename T>inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
    template<typename T>inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
    inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
    inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
    
    using namespace std;
    
    const ull ba=233;
    const db eps=1e-8;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    const int N=200000+10,maxn=1000000+10,inf=0x3f3f3f3f;
    
    struct node{
        ll x,y;
        node(){}
        node(ll _x,ll _y){x=_x,y=_y;}
        node operator -(const node&rhs)const{
            return node(x-rhs.x,y-rhs.y);
        }
        bool operator <(const node&rhs)const{
            return x<rhs.x||(x==rhs.x&&y<rhs.y);
        }
    };
    struct hull:set<node>{
        bool bad(iterator it)
        {
            if(it==begin()||next(it)==end())return 0;
            return (it->y-prev(it)->y)*(next(it)->x-it->x)<=(next(it)->y-it->y)*(it->x-prev(it)->x);
        }
        void update(node x)
        {
            if(find(x)!=end())return ;
            iterator it=insert(x).fi;
            if(bad(it)){erase(it);return ;}
            while(it!=begin()&&bad(prev(it)))
            {
    //            ans-=dis(*it,*prev(it));
                erase(prev(it));
            }
            while(next(it)!=end()&&bad(next(it)))
            {
    //            ans-=dis(*it,*next(it));
                erase(next(it));
            }
        }
        bool check(node x)
        {
            if(find(x)!=end())return 1;
            iterator it = insert(x).fi;bool ok=bad(it);erase(x);
            return ok;
        }
    }h,h1;
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            node a;int op;
            scanf("%d%lld%lld",&op,&a.x,&a.y);
            if(op==1)h.update(a),a.y=-a.y,h1.update(a);
            else
            {
                bool ok=h.check(a);a.y=-a.y;
                ok&=h1.check(a);
                puts(ok?"YES":"NO");
            }
        }
        return 0;
    }
    /********************
    
    ********************/
    
  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/10658102.html
Copyright © 2011-2022 走看看