zoukankan      html  css  js  c++  java
  • P2521 [HAOI2011]防线修建

    题意

    这道题的弱化版。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e4+10;
    const int maxm=1e5+10;
    const int maxq=2e5+10;
    const double eps=1e-8;
    int m,Q;
    double n,sx,sy,nowans;
    bool vis[maxm];
    struct Query{int op,x;double ans;}qr[maxq];
    struct Point
    {
        double x,y;
        inline double len(){return sqrt(x*x+y*y);}
        Point operator+(const Point& a)const{return (Point){x+a.x,y+a.y};}
        Point operator-(const Point& a)const{return (Point){x-a.x,y-a.y};}
        Point operator*(const double& k){return (Point){x*k,y*k};}
        Point operator/(const double& k){return (Point){x/k,y/k};}
        double operator*(const Point& a)const{return x*a.y-y*a.x;}
        double operator&(const Point& a)const{return x*a.x+y*a.y;}
    }p[maxm];
    inline int dcmp(double x)
    {
    	if(fabs(x)<=eps)return 0;
    	return x<0?-1:1;
    }
    bool operator<(Point a,Point b){return a.x==b.x?a.y<b.y:a.x<b.x;}
    set<Point>s;
    inline void add(Point a)
    {
    	set<Point>::iterator it1,it2;
    	it1=s.lower_bound(a);
    	it2=it1;it1--;
    	if(dcmp((a-*it1)*(*it2-a))>=0)return;
    	nowans-=(*it2-*it1).len();
    	it1=s.lower_bound(a);it2=it1;
    	if(it2!=s.end())
    	{
    		it2++;
    		while(it2!=s.end()&&dcmp((*it1-a)*(*it2-*it1))>=0)
    		{
    			nowans-=(*it2-*it1).len();
    			s.erase(it1);it1=it2;it2++;
    		}
    	}
    	it1=s.lower_bound(a);
    	it2=it1;it2--;
    	if(it2!=s.begin())
    	{
    		it2--,it1--;
    		while(it1!=s.begin()&&(*it1-a)*(*it2-*it1)<=0)
    		{
    			nowans-=(*it2-*it1).len();
    			s.erase(it1);it1=it2;
    			if(it2!=s.begin())it2--;
    		}
    	}
    	s.insert(a);
    	it1=it2=s.lower_bound(a);
    	it1--,it2++;
    	nowans+=(*it1-a).len()+(*it2-a).len();
    }
    int main()
    {
    	scanf("%lf%lf%lf",&n,&sx,&sy);
    	scanf("%d",&m);
    	for(int i=1;i<=m;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
    	scanf("%d",&Q);
    	for(int i=1;i<=Q;i++)
    	{
    		scanf("%d",&qr[i].op);
    		if(qr[i].op==1)scanf("%d",&qr[i].x),vis[qr[i].x]=1;
    	}
    	s.insert((Point){0,0});s.insert((Point){n,0});s.insert((Point){sx,sy});
    	nowans=((Point){sx,sy}).len()+((Point){n,0}-(Point){sx,sy}).len();
    	for(int i=1;i<=m;i++)if(!vis[i])add(p[i]);
    	for(int i=Q;i;i--)
    		if(qr[i].op==1)add(p[qr[i].x]);
    		else qr[i].ans=nowans;
    	for(int i=1;i<=Q;i++)if(qr[i].op==2)printf("%.2lf
    ",qr[i].ans);
    	return 0;
    }
    
  • 相关阅读:
    头部布局,搜索验证和AJAX自动搜索提示,并封装成组件,提高代码复用性
    yii2 使用指定数据库执行createCommand
    yii2在控制器中调用另一个控制器方法
    yii2 命令行执行php命令 commands(命令)
    ArrayDataProvider数据分页
    Yii2 数据查询
    Yii2的Gridview应用技巧补充
    yii2 or查询
    SQL---mysql新增字段
    Yii2.0 安装使用报错:yiiwebRequest::cookieValidationKey must be configured with a secret key.
  • 原文地址:https://www.cnblogs.com/nofind/p/12173076.html
Copyright © 2011-2022 走看看