1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<cmath>
7 #include<set>
8 using namespace std;
9 #define Maxn 100010
10
11 struct P
12 {
13 int x,y;
14 }a[Maxn];
15 int len;
16
17 int m;
18
19 P operator - (P x,P y)
20 {
21 P tt;
22 tt.x=x.x-y.x;
23 tt.y=x.y-y.y;
24 return tt;
25 }
26
27 bool operator < (P x,P y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);}
28
29 int Dot(P x,P y) {return x.x*y.x+x.y*y.y;}
30 int Cross(P x,P y) {return x.x*y.y-x.y*y.x;}
31
32 set<P> t;
33 double ans;
34
35 void ins(P nw)
36 {
37 set<P>:: iterator r=t.lower_bound(nw),l=r,tt;
38 l--;
39 if(Cross(nw-*l,*r-*l)>=0) return;
40 ans-=sqrt((double)Dot(*r-*l,*r-*l));
41 while(1)
42 {
43 tt=r,r++;
44 if(r==t.end()) break;
45 if(Cross(nw-*tt,nw-*r)<=0) break;
46 ans-=sqrt((double)Dot(*r-*tt,*r-*tt));
47 t.erase(tt);
48 }
49 while(l!=t.begin())
50 {
51 tt=l,l--;
52 if(Cross(*l-*tt,*l-nw)<=0) break;
53 ans-=sqrt((double)Dot(*l-*tt,*l-*tt));
54 t.erase(tt);
55 }
56 t.insert(nw);
57 tt=t.find(nw);l=r=tt;
58 l--;r++;
59 ans+=sqrt((double)Dot(nw-*l,nw-*l))+sqrt((double)Dot(nw-*r,nw-*r));
60 }
61
62 bool mark[Maxn];
63 int qr[2*Maxn],al;
64 double as[Maxn];
65 void init()
66 {
67 int n;
68 scanf("%d",&n);
69 a[0].x=0,a[0].y=0;t.insert(a[0]);
70 a[0].x=n,a[0].y=0;t.insert(a[0]);
71 ans=0;
72 scanf("%d%d",&a[0].x,&a[0].y);
73 ans+=n;
74 ins(a[0]);
75 scanf("%d",&m);
76 for(int i=1;i<=m;i++)
77 {
78 scanf("%d%d",&a[i].x,&a[i].y);
79 }
80
81 memset(mark,0,sizeof(mark));
82 int q;
83 scanf("%d",&q);
84 for(int i=1;i<=q;i++)
85 {
86 int x,y;
87 scanf("%d",&x);
88 if(x==1)
89 {
90 scanf("%d",&y);
91 qr[i]=y;
92 mark[y]=1;
93 }
94 else
95 {
96 qr[i]=-1;
97 }
98 }
99 for(int i=1;i<=m;i++) if(!mark[i]) ins(a[i]);
100 al=0;
101 for(int i=q;i>=1;i--)
102 {
103 if(qr[i]==-1)
104 {
105 as[++al]=ans;
106 }
107 else
108 {
109 ins(a[qr[i]]);
110 }
111 }
112 for(int i=al;i>=1;i--) printf("%.2lf\n",as[i]);
113 }
114
115 int main()
116 {
117 init();
118 return 0;
119 }