首页 > 编程语言 > 详细

日常练习//算法类

时间:2015-11-27 17:00:33      阅读:246      评论:0      收藏:0      [点我收藏+]

1.Matrix

//二维线段树

技术分享
 1 #include <iostream>
 2 #include <cstring>
 3 
 4 #define MAXN 1005
 5 #define xlson kx<<1, xl, mid
 6 #define xrson kx<<1|1, mid+1, xr
 7 #define ylson ky<<1, yl, mid
 8 #define yrson ky<<1|1, mid+1, yr
 9 
10 bool tree[MAXN<<2][MAXN<<2];
11 int X;
12 int N, T;
13 int num, X1, X2, Y1, Y2;
14 char ch;
15 
16 void editY(int kx, int ky, int yl, int yr)
17 {
18     if (Y1 <= yl && yr <= Y2)
19     {
20         tree[kx][ky] = !tree[kx][ky];
21         return ;
22     }    
23     int mid = (yl+yr)>>1;
24     if (Y1 <= mid) editY(kx, ylson);
25     if (Y2 > mid) editY(kx, yrson);
26 }
27 
28 void editX(int kx, int xl, int xr)
29 {
30     if (X1 <= xl && xr <= X2)
31     {
32         editY(kx, 1, 1, N);
33         return ;
34     }
35     int mid = (xl+xr) >> 1;
36     if (X1 <= mid) editX(xlson);
37     if (X2 > mid) editX(xrson);
38 }
39 
40 
41 
42 void queryY(int kx, int ky, int yl, int yr)
43 {
44     if (tree[kx][ky]) num++;
45     if (yl == yr) return ;
46     int mid = (yl+yr)>>1;
47     if (Y1 <= mid) queryY(kx, ylson);
48     else queryY(kx, yrson);
49 }
50 
51 void queryX(int kx, int xl, int xr)
52 {
53     queryY(kx, 1, 1, N);
54     if (xl == xr) return ;
55     int mid = (xl+xr) >> 1;
56     if (X1 <= mid) queryX(xlson);
57     else queryX(xrson);
58 }
59 
60 int main()
61 {
62     while (~scanf("%d", &X))
63     while (X--)
64     {
65         memset(tree, 0, sizeof(tree));                
66         scanf("%d %d%*c", &N, &T);
67         for (int i = 0; i < T; ++i)
68         {
69             scanf("%c %d %d%*c", &ch, &X1, &Y1);
70             if (ch == C)
71             {
72                 scanf("%d %d%*c", &X2, &Y2);
73                 editX(1, 1, N);
74             }
75             else
76             {
77                 num = 0;
78                 queryX(1, 1, N);
79                 if (num & 1)printf("1\n");
80                 else printf("0\n");
81             }
82         }
83         if (X) puts("");
84     }    
85     
86     return 0;
87 }
View Code

 

日常练习//算法类

原文:http://www.cnblogs.com/JustForCS/p/5000916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!