建设网站注意实现网站备案收费幕布
建设网站注意实现,网站备案收费幕布,轻奢风格装修图片,重庆网站建设运营Description GFS打算去郊外建所别墅#xff0c;享受生活#xff0c;于是他耗费巨资买下了一块风水宝地#xff0c;但令他震惊的是#xff0c;一群DSJ对GFS的富贵生活深恶痛绝#xff0c;决定打洞以搞破坏。现在我们简化一下这个问题#xff0c;在这片土地上会按顺序发生一…Description GFS打算去郊外建所别墅享受生活于是他耗费巨资买下了一块风水宝地但令他震惊的是一群DSJ对GFS的富贵生活深恶痛绝决定打洞以搞破坏。现在我们简化一下这个问题在这片土地上会按顺序发生一系列事件。①一只DSJ在(x,y) 这个点打了一个洞。②有着高雅品味GFS想建一个等腰直角三角形的别墅即由(x,y) ,(xd,y) ,(x,yd) 三点围成的三角形但为了地基的牢固他想知道当前这块三角形土地内的洞的个数。GFS现在对DSJ已经忍无可忍了请你帮他回答这些询问。初始土地上没有洞。GFS毕竟是GFS你可以认为土地无限大。 Input 第一行一个整数 n表示事件数。接下来n行每行3个非负整数x y d 。若d0 表示DSJ打洞的事件。否则表示GFS建房的询问。 Output 对每个询问输出一个整数表示当时询问的三角形内的洞的个数。 Sample Input 输入181 3 01 5 03 6 04 4 02 6 01 5 31 5 41 1 1输入241 5 03 7 02 5 62 3 4 Sample Output 输出1330输出210 Data Constraint 30%的数据n3333 。另30% 的数据 GFS只会在DSJ打完洞后才开始询问,xi,yi333333 。100%的数据 1n88888xi,yi3333333 。 题解 四维偏序问题cdq分治再用树状数组记录一个前缀和代码 1 #include cstdio2 #include iostream3 #include algorithm4 using namespace std;5 struct edge { int x,y,z,d; }a[900000],b[900000],c1[90000],c2[900000];6 int sz[40000000],ans[900000],tot,num,mx,n,x,y,d;7 bool cmp(edge x,edge y) { return x.zy.z||(x.zy.zx.dy.d); }8 bool cmp1(edge x,edge y) { return x.xy.x; }9 int lowbit(int x) { return x-x; }
10 void insert(int x,int y)
11 {
12 numnumy;
13 for (x;xmx;xlowbit(x)) sz[x]y;
14 }
15 int getsum(int x)
16 {
17 int knum;
18 for (x;x;x-lowbit(x)) k-sz[x];
19 return k;
20 }
21 void work(int l,int r)
22 {
23 if (lr) return;
24 int mid(lr)/2,cnt10,cnt20;
25 work(l,mid),work(mid1,r);
26 for (int il;imid;i) if (!b[i].d) c1[cnt1]b[i];
27 for (int imid1;ir;i) if (b[i].d) c2[cnt2]b[i];
28 if (!cnt1||!cnt2) return;
29 sort(c11,c1cnt11,cmp1),sort(c21,c2cnt21,cmp1);
30 int kcnt11;
31 for (int icnt2;i1;i--)
32 {
33 while (k1c1[k-1].xc2[i].x) insert(c1[--k].y,1);
34 ans[c2[i].d]getsum(c2[i].y-1);
35 }
36 for (int ik;icnt1;i) insert(c1[i].y,-1);
37 }
38 void cdq(int l,int r)
39 {
40 if (lr) return;
41 int mid(lr)/2;
42 cdq(l,mid),cdq(mid1,r);
43 int cnt0,boo0;
44 for (int il;imid;i) if (!a[i].d) b[cnt]a[i];
45 for (int imid1;ir;i) if (a[i].d) b[cnt]a[i],boo1;
46 if (!boo||!cnt) return;
47 sort(b1,bcnt1,cmp),work(1,cnt);
48 }
49 int main()
50 {
51 scanf(%d,n);
52 for (int i1;in;i)
53 {
54 scanf(%d%d%d,x,y,d);
55 a[i].xx1,a[i].yy1,a[i].zxyd,mxmax(mx,yd);
56 if (d!0) a[i].dtot;
57 }
58 cdq(1,n);
59 for (int i1;itot;i) printf(%d\n,ans[i]);
60 } 转载于:https://www.cnblogs.com/Comfortable/p/9511907.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86316.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!