浅谈树状数组与主席树:https://www.cnblogs.com/AKMer/p/9946944.html

题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2877

这就是个屎题。

而且至今我还不知道为什么洛谷和本地都可以过但是\(BZOJ\)会\(RE\)

利用更相减损数以棋盘守护者为中心进行二维差分,那么每次修改就变成若干个点的值的修改了。

然后二维线段树维护差分值。

详细一点你们可以看这个博客(我是懒得搞了):http://www.cnblogs.com/milky-w/p/8530723.html

反正我是不想再来回头看这题了,简直屎得一批。

2019.01.03更新:递归版代码开O3可以在BZOJ过,所以我觉得是递归的锅,果然把所有递归全部改成非递归就可以过了。还是清楚为什么递归层数并不多会RE。

时间复杂度:\(O(nmlognlogm)\)

空间复杂度:\(O(mn)\)

非递归版代码如下:

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn=5e5+5;
  7. int n,m,X,Y,T;
  8. ll a[maxn],b[maxn];
  9. ll read() {
  10. ll x=0,f=1;char ch=getchar();
  11. for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
  12. for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
  13. return x*f;
  14. }
  15. ll gcd(ll a,ll b) {
  16. while(b) {
  17. ll tmp=b;b=a%b;
  18. a=tmp;
  19. }
  20. return abs(a);
  21. }
  22. struct tree_node {
  23. int p,l,r;
  24. tree_node () {}
  25. tree_node (int _p,int _l,int _r) {
  26. p=_p,l=_l,r=_r;
  27. }
  28. };
  29. struct segment_tree_y {
  30. int tot,top;
  31. tree_node sta[maxn<<1];
  32. int ls[maxn<<2],rs[maxn<<2];
  33. ll val[maxn<<2],ans[maxn<<2];
  34. int rt1[maxn<<1],rt2[maxn<<1];
  35. void build(int root,int x) {
  36. sta[++top]=tree_node(root,1,m);
  37. int now=1;
  38. while(now<=top) {
  39. if(sta[now].l==sta[now].r) {now++;continue;}
  40. int mid=(sta[now].l+sta[now].r)>>1;
  41. ls[sta[now].p]=++tot,rs[sta[now].p]=++tot;
  42. sta[++top]=tree_node(ls[sta[now].p],sta[now].l,mid);
  43. sta[++top]=tree_node(rs[sta[now].p],mid+1,sta[now].r);
  44. now++;
  45. }
  46. while(top) {
  47. tree_node tmp=sta[top--];
  48. if(tmp.l==tmp.r)val[tmp.p]=a[(x-1)*m+tmp.l];
  49. else val[tmp.p]=gcd(val[ls[tmp.p]],val[rs[tmp.p]]);
  50. }
  51. }
  52. void update(int root,int root1,int root2) {
  53. sta[++top]=tree_node(root,1,m);
  54. rt1[top]=root1,rt2[top]=root2;
  55. int now=1;
  56. while(now<=top) {
  57. if(sta[now].l==sta[now].r) {now++;continue;}
  58. int mid=(sta[now].l+sta[now].r)>>1;
  59. ls[sta[now].p]=++tot,rs[sta[now].p]=++tot;
  60. sta[++top]=tree_node(ls[sta[now].p],sta[now].l,mid);
  61. rt1[top]=ls[rt1[now]],rt2[top]=ls[rt2[now]];
  62. sta[++top]=tree_node(rs[sta[now].p],mid+1,sta[now].r);
  63. rt1[top]=rs[rt1[now]],rt2[top]=rs[rt2[now]];
  64. now++;
  65. }
  66. while(top) {
  67. tree_node tmp=sta[top];
  68. int u=rt1[top],v=rt2[top];top--;
  69. if(tmp.l==tmp.r)val[tmp.p]=gcd(val[u],val[v]);
  70. else val[tmp.p]=gcd(val[ls[tmp.p]],val[rs[tmp.p]]);
  71. }
  72. }
  73. ll query(int rt,int L,int R) {
  74. sta[++top]=tree_node(rt,1,m);
  75. int now=1;
  76. while(now<=top) {
  77. if(L<=sta[now].l&&sta[now].r<=R) {now++;continue;}
  78. int mid=(sta[now].l+sta[now].r)>>1;
  79. if(L<=mid)sta[++top]=tree_node(ls[sta[now].p],sta[now].l,mid);
  80. if(R>mid)sta[++top]=tree_node(rs[sta[now].p],mid+1,sta[now].r);
  81. now++;
  82. }
  83. while(top) {
  84. tree_node tmp=sta[top--];
  85. if(L<=tmp.l&&tmp.r<=R)ans[tmp.p]=val[tmp.p];
  86. else {
  87. ans[tmp.p]=0;
  88. int mid=(tmp.l+tmp.r)>>1;
  89. if(L<=mid)ans[tmp.p]=ans[ls[tmp.p]];
  90. if(R>mid)ans[tmp.p]=gcd(ans[tmp.p],ans[rs[tmp.p]]);
  91. }
  92. }
  93. return ans[rt];
  94. }
  95. void change(int p,int pos,ll v,bool opt) {
  96. sta[++top]=tree_node(p,1,m);
  97. int now=1;
  98. while(now<=top) {
  99. if(sta[now].l==sta[now].r) {now++;continue;}
  100. int mid=(sta[now].l+sta[now].r)>>1;
  101. if(pos<=mid)sta[++top]=tree_node(ls[sta[now].p],sta[now].l,mid);
  102. else sta[++top]=tree_node(rs[sta[now].p],mid+1,sta[now].r);
  103. now++;
  104. }
  105. while(top) {
  106. tree_node tmp=sta[top--];
  107. if(tmp.l==tmp.r) {
  108. if(opt)val[tmp.p]+=v;
  109. else val[tmp.p]=v;
  110. }
  111. else val[tmp.p]=gcd(val[ls[tmp.p]],val[rs[tmp.p]]);
  112. }
  113. }
  114. }T2;
  115. struct segment_tree_x {
  116. int top;
  117. int rt[maxn<<2];
  118. ll ans[maxn<<2];
  119. tree_node sta[maxn<<1];
  120. void build() {
  121. sta[++top]=tree_node(1,1,n);
  122. int now=1;
  123. while(now<=top) {
  124. if(sta[now].l==sta[now].r) {now++;continue;}
  125. int mid=(sta[now].l+sta[now].r)>>1;
  126. sta[++top]=tree_node(sta[now].p<<1,sta[now].l,mid);
  127. sta[++top]=tree_node(sta[now].p<<1|1,mid+1,sta[now].r);
  128. now++;
  129. }
  130. while(top) {
  131. tree_node tmp=sta[top--];rt[tmp.p]=++T2.tot;
  132. if(tmp.l==tmp.r)T2.build(rt[tmp.p],tmp.l);
  133. else T2.update(rt[tmp.p],rt[tmp.p<<1],rt[tmp.p<<1|1]);
  134. }
  135. }
  136. ll query(int x1,int x2,int y1,int y2) {
  137. sta[++top]=tree_node(1,1,n);
  138. int now=1;
  139. while(now<=top) {
  140. if(x1<=sta[now].l&&sta[now].r<=x2) {now++;continue;}
  141. int mid=(sta[now].l+sta[now].r)>>1;
  142. if(x1<=mid)sta[++top]=tree_node(sta[now].p<<1,sta[now].l,mid);
  143. if(x2>mid)sta[++top]=tree_node(sta[now].p<<1|1,mid+1,sta[now].r);
  144. now++;
  145. }
  146. while(top) {
  147. tree_node tmp=sta[top--];
  148. if(x1<=tmp.l&&tmp.r<=x2)ans[tmp.p]=T2.query(rt[tmp.p],y1,y2);
  149. else {
  150. ans[tmp.p]=0;int mid=(tmp.l+tmp.r)>>1;
  151. if(x1<=mid)ans[tmp.p]=ans[tmp.p<<1];
  152. if(x2>mid)ans[tmp.p]=gcd(ans[tmp.p],ans[tmp.p<<1|1]);
  153. }
  154. }
  155. return ans[1];
  156. }
  157. void add(int x,int y,ll v) {
  158. if(x<1||x>n||y<1||y>m)return;
  159. sta[++top]=tree_node(1,1,n);
  160. int now=1;
  161. while(now<=top) {
  162. if(sta[now].l==sta[now].r) {now++;continue;}
  163. int mid=(sta[now].l+sta[now].r)>>1;
  164. if(x<=mid)sta[++top]=tree_node(sta[now].p<<1,sta[now].l,mid);
  165. else sta[++top]=tree_node(sta[now].p<<1|1,mid+1,sta[now].r);
  166. now++;
  167. }
  168. while(top) {
  169. tree_node tmp=sta[top--];
  170. if(tmp.l==tmp.r)T2.change(rt[tmp.p],y,v,1);
  171. else {
  172. ll lv=T2.query(rt[tmp.p<<1],y,y);
  173. ll rv=T2.query(rt[tmp.p<<1|1],y,y);
  174. T2.change(rt[tmp.p],y,gcd(lv,rv),0);
  175. }
  176. }
  177. }
  178. }T1;
  179. int main() {
  180. n=read(),m=read(),X=read(),Y=read(),T=read();
  181. for(int i=1;i<=n*m;i++)a[i]=read();
  182. for(int i=1;i<=n*m;i++) {
  183. int pos=(i-1)%m+1;
  184. if(pos<Y)b[i]=a[i]-a[i+1];
  185. else if(pos>Y)b[i]=a[i]-a[i-1];
  186. else b[i]=a[i];
  187. }
  188. for(int i=1;i<=n*m;i++) {
  189. int pos=(i-1)/m+1;
  190. if(pos<X)a[i]=b[i]-b[i+m];
  191. else if(pos>X)a[i]=b[i]-b[i-m];
  192. else a[i]=b[i];
  193. }
  194. T1.build();
  195. while(T--) {
  196. int opt=read(),x1=read(),y1=read(),x2=read(),y2=read();
  197. if(!opt) {
  198. x1=X-x1,x2=X+x2,y1=Y-y1,y2=Y+y2;
  199. printf("%lld\n",T1.query(x1,x2,y1,y2));
  200. }
  201. if(opt) {
  202. ll val=read();
  203. if(x1<=X&&x2>=X&&y1<=Y&&y2>=Y) {
  204. T1.add(X,Y,val);
  205. T1.add(x1-1,y1-1,val);
  206. T1.add(x1-1,y2+1,val);
  207. T1.add(x2+1,y1-1,val);
  208. T1.add(x2+1,y2+1,val);
  209. T1.add(x1-1,Y,-val);
  210. T1.add(x2+1,Y,-val);
  211. T1.add(X,y1-1,-val);
  212. T1.add(X,y2+1,-val);
  213. }
  214. else if(y1<=Y&&y2>=Y) {
  215. if(x1<X) {
  216. T1.add(x2,Y,val);
  217. T1.add(x1-1,y1-1,val);
  218. T1.add(x1-1,y2+1,val);
  219. T1.add(x1-1,Y,-val);
  220. T1.add(x2,y1-1,-val);
  221. T1.add(x2,y2+1,-val);
  222. }
  223. else {
  224. T1.add(x1,Y,val);
  225. T1.add(x2+1,y1-1,val);
  226. T1.add(x2+1,y2+1,val);
  227. T1.add(x2+1,Y,-val);
  228. T1.add(x1,y1-1,-val);
  229. T1.add(x1,y2+1,-val);
  230. }
  231. }
  232. else if(x1<=X&&x2>=X) {
  233. if(y1<Y) {
  234. T1.add(X,y2,val);
  235. T1.add(x1-1,y1-1,val);
  236. T1.add(x2+1,y1-1,val);
  237. T1.add(X,y1-1,-val);
  238. T1.add(x1-1,y2,-val);
  239. T1.add(x2+1,y2,-val);
  240. }
  241. else {
  242. T1.add(X,y1,val);
  243. T1.add(x1-1,y2+1,val);
  244. T1.add(x2+1,y2+1,val);
  245. T1.add(X,y2+1,-val);
  246. T1.add(x1-1,y1,-val);
  247. T1.add(x2+1,y1,-val);
  248. }
  249. }
  250. else if(x1<X&&y1<Y) {
  251. T1.add(x2,y2,val);
  252. T1.add(x1-1,y1-1,val);
  253. T1.add(x1-1,y2,-val);
  254. T1.add(x2,y1-1,-val);
  255. }
  256. else if(x1<X&&y1>Y) {
  257. T1.add(x2,y1,val);
  258. T1.add(x1-1,y2+1,val);
  259. T1.add(x1-1,y1,-val);
  260. T1.add(x2,y2+1,-val);
  261. }
  262. else if(x1>X&&y1<Y) {
  263. T1.add(x1,y2,val);
  264. T1.add(x2+1,y1-1,val);
  265. T1.add(x1,y1-1,-val);
  266. T1.add(x2+1,y2,-val);
  267. }
  268. else if(x1>X&&y1>Y) {
  269. T1.add(x1,y1,val);
  270. T1.add(x2+1,y2+1,val);
  271. T1.add(x1,y2+1,-val);
  272. T1.add(x2+1,y1,-val);
  273. }
  274. }
  275. }
  276. return 0;
  277. }

递归版代码如下:

  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. typedef long long ll;
  5. const int maxn=5e5+5;
  6. int n,m,X,Y,T;
  7. ll a[maxn],b[maxn];
  8. ll read() {
  9. ll x=0,f=1;char ch=getchar();
  10. for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
  11. for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
  12. return x*f;
  13. }
  14. ll gcd(ll a,ll b) {
  15. if(!b)return abs(a);
  16. return gcd(b,a%b);
  17. }
  18. struct segment_tree_y {
  19. int tot;
  20. ll val[maxn<<2];
  21. int ls[maxn<<2],rs[maxn<<2];
  22. void build(int &p,int l,int r,int x) {
  23. p=++tot;
  24. if(l==r) {val[p]=a[(x-1)*m+l];return;}
  25. int mid=(l+r)>>1;
  26. build(ls[p],l,mid,x);
  27. build(rs[p],mid+1,r,x);
  28. val[p]=gcd(val[ls[p]],val[rs[p]]);
  29. }
  30. void update(int &p1,int p2,int p3,int l,int r) {
  31. p1=++tot;
  32. if(l==r) {val[p1]=gcd(val[p2],val[p3]);return;}
  33. int mid=(l+r)>>1;
  34. update(ls[p1],ls[p2],ls[p3],l,mid);
  35. update(rs[p1],rs[p2],rs[p3],mid+1,r);
  36. val[p1]=gcd(val[ls[p1]],val[rs[p1]]);
  37. }
  38. ll query(int p,int l,int r,int L,int R) {
  39. if(L<=l&&r<=R)return val[p];
  40. int mid=(l+r)>>1;ll res=0;
  41. if(L<=mid)res=query(ls[p],l,mid,L,R);
  42. if(R>mid)res=gcd(res,query(rs[p],mid+1,r,L,R));
  43. return res;
  44. }
  45. void add(int p,int l,int r,int pos,ll v) {
  46. if(l==r) {val[p]+=v;return;}
  47. int mid=(l+r)>>1;
  48. if(pos<=mid)add(ls[p],l,mid,pos,v);
  49. else add(rs[p],mid+1,r,pos,v);
  50. val[p]=gcd(val[ls[p]],val[rs[p]]);
  51. }
  52. void change(int p,int l,int r,int pos,ll v) {
  53. if(l==r) {val[p]=v;return;}
  54. int mid=(l+r)>>1;
  55. if(pos<=mid)change(ls[p],l,mid,pos,v);
  56. else change(rs[p],mid+1,r,pos,v);
  57. val[p]=gcd(val[ls[p]],val[rs[p]]);
  58. }
  59. }T2;
  60. struct segment_tree_x {
  61. int rt[maxn<<2];
  62. void build(int p,int l,int r) {
  63. if(l==r) {T2.build(rt[p],1,m,l);return;}
  64. int mid=(l+r)>>1;
  65. build(p<<1,l,mid);
  66. build(p<<1|1,mid+1,r);
  67. T2.update(rt[p],rt[p<<1],rt[p<<1|1],1,m);
  68. }
  69. ll query(int p,int l,int r,int x1,int x2,int y1,int y2) {
  70. if(x1<=l&&r<=x2)return T2.query(rt[p],1,m,y1,y2);
  71. int mid=(l+r)>>1;ll res=0;
  72. if(x1<=mid)res=query(p<<1,l,mid,x1,x2,y1,y2);
  73. if(x2>mid)res=gcd(res,query(p<<1|1,mid+1,r,x1,x2,y1,y2));
  74. return res;
  75. }
  76. void add(int p,int l,int r,int x,int y,ll v) {
  77. if(x<1||x>n||y<1||y>m)return;
  78. if(l==r) {T2.add(rt[p],1,m,y,v);return;}
  79. int mid=(l+r)>>1;
  80. if(x<=mid)add(p<<1,l,mid,x,y,v);
  81. else add(p<<1|1,mid+1,r,x,y,v);
  82. ll lv=T2.query(rt[p<<1],1,m,y,y);
  83. ll rv=T2.query(rt[p<<1|1],1,m,y,y);
  84. T2.change(rt[p],1,m,y,gcd(lv,rv));
  85. }
  86. }T1;
  87. int main() {
  88. n=read(),m=read(),X=read(),Y=read(),T=read();
  89. for(int i=1;i<=n*m;i++)a[i]=read();
  90. for(int i=1;i<=n*m;i++) {
  91. int pos=(i-1)%m+1;
  92. if(pos<Y)b[i]=a[i]-a[i+1];
  93. else if(pos>Y)b[i]=a[i]-a[i-1];
  94. else b[i]=a[i];
  95. }
  96. for(int i=1;i<=n*m;i++) {
  97. int pos=(i-1)/m+1;
  98. if(pos<X)a[i]=b[i]-b[i+m];
  99. else if(pos>X)a[i]=b[i]-b[i-m];
  100. else a[i]=b[i];
  101. }
  102. T1.build(1,1,n);
  103. while(T--) {
  104. int opt=read(),x1=read(),y1=read(),x2=read(),y2=read();
  105. if(!opt) {
  106. x1=X-x1,x2=X+x2,y1=Y-y1,y2=Y+y2;
  107. printf("%lld\n",T1.query(1,1,n,x1,x2,y1,y2));
  108. }
  109. if(opt) {
  110. ll val=read();
  111. if(x1<=X&&x2>=X&&y1<=Y&&y2>=Y) {
  112. T1.add(1,1,n,X,Y,val);
  113. T1.add(1,1,n,x1-1,y1-1,val);
  114. T1.add(1,1,n,x1-1,y2+1,val);
  115. T1.add(1,1,n,x2+1,y1-1,val);
  116. T1.add(1,1,n,x2+1,y2+1,val);
  117. T1.add(1,1,n,x1-1,Y,-val);
  118. T1.add(1,1,n,x2+1,Y,-val);
  119. T1.add(1,1,n,X,y1-1,-val);
  120. T1.add(1,1,n,X,y2+1,-val);
  121. }
  122. else if(y1<=Y&&y2>=Y) {
  123. if(x1<X) {
  124. T1.add(1,1,n,x2,Y,val);
  125. T1.add(1,1,n,x1-1,y1-1,val);
  126. T1.add(1,1,n,x1-1,y2+1,val);
  127. T1.add(1,1,n,x1-1,Y,-val);
  128. T1.add(1,1,n,x2,y1-1,-val);
  129. T1.add(1,1,n,x2,y2+1,-val);
  130. }
  131. else {
  132. T1.add(1,1,n,x1,Y,val);
  133. T1.add(1,1,n,x2+1,y1-1,val);
  134. T1.add(1,1,n,x2+1,y2+1,val);
  135. T1.add(1,1,n,x2+1,Y,-val);
  136. T1.add(1,1,n,x1,y1-1,-val);
  137. T1.add(1,1,n,x1,y2+1,-val);
  138. }
  139. }
  140. else if(x1<=X&&x2>=X) {
  141. if(y1<Y) {
  142. T1.add(1,1,n,X,y2,val);
  143. T1.add(1,1,n,x1-1,y1-1,val);
  144. T1.add(1,1,n,x2+1,y1-1,val);
  145. T1.add(1,1,n,X,y1-1,-val);
  146. T1.add(1,1,n,x1-1,y2,-val);
  147. T1.add(1,1,n,x2+1,y2,-val);
  148. }
  149. else {
  150. T1.add(1,1,n,X,y1,val);
  151. T1.add(1,1,n,x1-1,y2+1,val);
  152. T1.add(1,1,n,x2+1,y2+1,val);
  153. T1.add(1,1,n,X,y2+1,-val);
  154. T1.add(1,1,n,x1-1,y1,-val);
  155. T1.add(1,1,n,x2+1,y1,-val);
  156. }
  157. }
  158. else if(x1<X&&y1<Y) {
  159. T1.add(1,1,n,x2,y2,val);
  160. T1.add(1,1,n,x1-1,y1-1,val);
  161. T1.add(1,1,n,x1-1,y2,-val);
  162. T1.add(1,1,n,x2,y1-1,-val);
  163. }
  164. else if(x1<X&&y1>Y) {
  165. T1.add(1,1,n,x2,y1,val);
  166. T1.add(1,1,n,x1-1,y2+1,val);
  167. T1.add(1,1,n,x1-1,y1,-val);
  168. T1.add(1,1,n,x2,y2+1,-val);
  169. }
  170. else if(x1>X&&y1<Y) {
  171. T1.add(1,1,n,x1,y2,val);
  172. T1.add(1,1,n,x2+1,y1-1,val);
  173. T1.add(1,1,n,x1,y1-1,-val);
  174. T1.add(1,1,n,x2+1,y2,-val);
  175. }
  176. else if(x1>X&&y1>Y) {
  177. T1.add(1,1,n,x1,y1,val);
  178. T1.add(1,1,n,x2+1,y2+1,val);
  179. T1.add(1,1,n,x1,y2+1,-val);
  180. T1.add(1,1,n,x2+1,y1,-val);
  181. }
  182. }
  183. }
  184. return 0;
  185. }

BZOJ2877:[NOI2012]魔幻棋盘的更多相关文章

  1. BZOJ2877 NOI2012魔幻棋盘(二维线段树)

    显然一个序列的gcd=gcd(其差分序列的gcd,序列中第一个数).于是一维情况直接线段树维护差分序列即可. 容易想到将该做法拓展到二维.于是考虑维护二维差分,查询时对差分矩阵求矩形的gcd,再对矩形 ...

  2. [BZOJ2877][NOI2012]魔幻棋盘(二维线段树)

    https://blog.sengxian.com/solutions/bzoj-2877 注意二维线段树的upd()也是一个O(log n)的函数(pushdown()应该也是但没写过). #inc ...

  3. BZOJ2877 [Noi2012]魔幻棋盘

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. 【bzoj2877】 Noi2012—魔幻棋盘

    http://www.lydsy.com/JudgeOnline/problem.php?id=2877 (题目链接) 题意 一个${n*m}$的矩阵,维护两个操作:给任意子矩阵${+val}$:问某 ...

  5. 2877: [Noi2012]魔幻棋盘 - BZOJ

    DescriptionInput 第一行为两个正整数N,M,表示棋盘的大小. 第二行为两个正整数X,Y,表示棋盘守护者的位置. 第三行仅有一个正整数T,表示棋盘守护者将进行次操作. 接下来N行,每行有 ...

  6. NOI2012 魔幻棋盘

    http://www.lydsy.com/JudgeOnline/problem.php?id=2877 二维线段树. 好恶...... B类数据: 棋盘是一维的. 我们有一个结论: $gcd(a_{ ...

  7. 题解 洛谷 P2086 【[NOI2012]魔幻棋盘】

    先考虑只有一维的情况,要求支持区间加和求区间 \(\gcd\),根据 \(\gcd\) 的性质,发现: \[ \gcd(a_1,a_2,a_3,\ldots a_n)=\gcd(a_i,a_2-a_1 ...

  8. 数据结构(二维线段树,差分): NOI2012 魔幻棋盘

    貌似想复杂了…… #include <iostream> #include <cstring> #include <cstdio> #define mid ((l+ ...

  9. 【NOI2012】魔幻棋盘

    Description 将要读二年级的小 Q 买了一款新型益智玩具——魔幻棋盘,它是一个N行M列的网格棋盘,每个格子中均有一个正整数.棋盘守护者在棋盘的第X行Y列(行与列均从1开始编号) 并且始终不会 ...

随机推荐

  1. 无刷新URL 更新

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. servletResponse 控制浏览器缓存

    //当访问一些资源文件时,我们希望,访问一次后,资源文件能够在缓存在浏览器中,当我们再次访问该资源时 //直接从缓存中去取,这样可以减少服务器的压力 package response; import ...

  3. python学习(十四)面向对象

    Python中的面向对象,先写类,会生成类对象,类对象然后创建对象,对象就可以拿来用了. Python支持多重继承. class语句创建类对象,并将其赋值给变量名. class语句内的赋值语句会创建类 ...

  4. NorFlash linux分区分析

    一般情况下,与板卡相关的内容都在bsp中(即arch/arm/mach-xxx/board-xxx.c)中,但norflash的分区直接放在norflash驱动中.由于norflash应用基于mtd, ...

  5. RethinkDB创始人教你怎样找到创业点子

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1YmFpdGlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  6. python 基础 1.5 python数据类型(四)--字典常用方法示例

    一. 字典 #字典 dict1 = {'name':'lzc','age':'20','sex':'man'} print dict1 print type(dict1) >>> { ...

  7. Python 单元测试 之setUP() 和 tearDown()

    setUp:表示前置条件,它在每一个用例执行之前必须会执行一次 setUp可以理解为我们需要自动化测试时,需要打开网页窗口,输入对应测试地址,这一些属于前置条件. tearDown:表示释放资源,它在 ...

  8. 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树

    [BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...

  9. ThreadLocal的简单使用

    package com.thread; public class ThreadLocalTest { public static void main(String[] args) { final Pe ...

  10. 宿舍更换的新淋浴喷头"水温vs旋钮角度"关系的研究(曲线)

    版权声明:我极少创造新知识,大部分情况下是个知识的二道贩子 https://blog.csdn.net/stereohomology/article/details/24478825 应该非常一目了然 ...