zoukankan      html  css  js  c++  java
  • P4169 [Violet]天使玩偶/SJY摆棋子

      1 // luogu-judger-enable-o2
      2 #include<cstdio> 
      3 #include<iostream>
      4 using namespace std;
      5 const int maxn=1e7+10;
      6 const int inf=2e7+7;
      7 struct node
      8 {
      9     int x,y,id,ans,time;
     10 }a[maxn],b[maxn],tt[maxn];;
     11 int flag;
     12 int len,x,y;
     13 int n,q;
     14 struct XX
     15 {
     16     int c[maxn];
     17     int  lowbit(int x)
     18     {
     19         return x&(-x);
     20     }
     21     void update(int x,int w)
     22     {
     23         for(;x<=len;x+=lowbit(x))
     24         {
     25             c[x]=max(w,c[x]);
     26         }
     27     }
     28     int sum(int x)
     29     {
     30         int res=0;
     31         for(;x;x-=lowbit(x))
     32         {
     33             res=max(res,c[x]);
     34         }
     35         if(res)
     36         {
     37             return res;
     38         }
     39         else
     40         return -inf;
     41     }
     42     void clear(int x)
     43     {
     44         for(;c[x];x+=lowbit(x))
     45         {
     46             c[x]=0;
     47         }
     48     }
     49 }XX;
     50 void CDQ(int l,int r)
     51 {
     52     if(l == r) return;
     53     int mid =(l+r)>>1;
     54     CDQ (l,mid);
     55     CDQ(mid+1,r);
     56     int t1=l;
     57     int t2=mid+1;
     58     int k=l;
     59     while(t2<=r)
     60     {
     61         while(t1<=mid&&b[t1].x<=b[t2].x)
     62         {
     63             if(b[t1].time==1)
     64             {
     65                 XX.update(b[t1].y,b[t1].x+b[t1].y);
     66              } 
     67              tt[k++]=b[t1++];
     68         }
     69         if(b[t2].time==2)
     70         {
     71             a[b[t2].id].ans=min(a[b[t2].id].ans,b[t2].x+b[t2].y-XX.sum(b[t2].y));    
     72         }
     73         tt[k++]=b[t2++];
     74     }
     75     for(int i=l;i<=t1-1;i++)
     76     {
     77         if(b[i].time==1)
     78         {
     79             XX.clear(b[i].y);
     80         }
     81     }
     82     
     83     while(t1<=mid)
     84     {
     85         tt[k++]=b[t1++];
     86     }
     87     for(int i=l;i<=r;i++)
     88     {
     89         b[i]=tt[i];
     90     }
     91 }
     92 void solve(int x1,int y1)
     93 {
     94     for(int i=1;i<=n+q;i++)
     95     {
     96         b[i]=a[i];
     97         if(x1)
     98         {
     99             b[i].x=len-b[i].x;
    100         }
    101         if(y1)
    102         {
    103             b[i].y=len-b[i].y;
    104         }
    105     }
    106     CDQ(1,n+q);
    107 }
    108 int main()
    109 {
    110     scanf("%d%d",&n,&q);
    111     for(int i=1;i<=n;i++)
    112     {
    113         scanf("%d%d",&x,&y);
    114         a[i].time=1;
    115         a[i].id=i;
    116         a[i].x=++x;
    117         a[i].y=++y;
    118         len=max(len,max(x,y));
    119     }
    120     for(int i=n+1;i<=n+q;i++)
    121     {
    122         scanf("%d%d%d",&flag,&x,&y);
    123         a[i].time=flag;
    124         a[i].id=i;
    125         a[i].x=++x;
    126         a[i].y=++y;
    127         a[i].ans=inf;
    128         len=max(len,max(x,y));
    129     }
    130     len++;
    131     solve(0,0);
    132     solve(0,1);
    133     solve(1,0);
    134     solve(1,1);
    135     for(int i=n+1;i<=n+q;i++)
    136     {
    137         if(a[i].time ==2)
    138         {
    139             printf("%d
    ",a[i].ans);
    140         }
    141     }
    142     return 0;
    143  } 
  • 相关阅读:
    软件项目成员的业绩考核
    COM, COM+ and .NET 程序集的区别
    .Net 应用框架设计系列(二)
    怎样在Web开发中完美控制IE标题栏
    影楼系统
    PHP读取ACCESS数据到MYSQL
    简单分享apache 封 IP 的方法
    详解Apache下.htaccess文件常用配置
    fleaphp常用方法分页之Pager
    php遍历文件夹读取文件夹中图片并分页显示图片
  • 原文地址:https://www.cnblogs.com/2529102757ab/p/10987796.html
Copyright © 2011-2022 走看看