题意


分析

自己的想法

可以莫队+平衡树。

对每个颜色维护一颗平衡树,然后移动莫队端点的时候在平衡树中查询。

区间加操作容易实现。

单点修改转化为平衡树的插入删除。

感谢Z前辈的指导。

时间复杂度\(O(n^{\frac{5}{3}} \cdot \log n)\)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<queue>
  5. #include<algorithm>
  6. template<class T>T read(T&x)
  7. {
  8. T data=0;
  9. int w=1;
  10. char ch=getchar();
  11. while(!isdigit(ch))
  12. {
  13. if(ch=='-')
  14. w=-1;
  15. ch=getchar();
  16. }
  17. while(isdigit(ch))
  18. {
  19. data=data*10+ch-'0';
  20. ch=getchar();
  21. }
  22. return x=data*w;
  23. }
  24. typedef long long ll;
  25. using namespace std;
  26. const int MAXN=1e5+7,mod=998244353;
  27. int n,m;
  28. int blo,bl[MAXN]; // block,belong
  29. int c[MAXN],pre[MAXN],now[MAXN]; // color,撤销操作3用的链表
  30. queue<int>pool; // 内存池
  31. int root[MAXN],sz;
  32. struct Treap
  33. {
  34. int ch[MAXN][2],siz[MAXN];
  35. int pos[MAXN],pri[MAXN]; // 在原序列中的位置,优先级
  36. int val[MAXN],sumv[MAXN],addv[MAXN]; // 值,子树的值和,加法标记
  37. int newnode(int p,int v) // 新建位置为p,值为v的节点
  38. {
  39. int nd;
  40. if(!pool.empty())
  41. {
  42. nd=pool.front();
  43. pool.pop();
  44. }
  45. else
  46. {
  47. nd=++sz;
  48. }
  49. ch[nd][0]=ch[nd][1]=0,siz[nd]=1;
  50. pos[nd]=p,pri[nd]=rand()|rand()<<15;
  51. val[nd]=v,sumv[nd]=v,addv[nd]=0;
  52. return nd;
  53. }
  54. void pushup(int now)
  55. {
  56. // cerr<<"pushup "<<now<<endl;
  57. siz[now]=siz[ch[now][0]]+1+siz[ch[now][1]]; // edit 2
  58. sumv[now]=((ll)sumv[ch[now][0]]+val[now]+sumv[ch[now][1]])%mod;
  59. }
  60. void pushdown(int now)
  61. {
  62. // cerr<<"pushdown "<<now<<endl;
  63. if(addv[now])
  64. {
  65. if(ch[now][0]) // 判断非空
  66. {
  67. (val[ch[now][0]]+=addv[now])%=mod,
  68. (sumv[ch[now][0]]+=(ll)siz[ch[now][0]]*addv[now]%mod)%=mod,
  69. (addv[ch[now][0]]+=addv[now])%=mod;
  70. }
  71. if(ch[now][1])
  72. {
  73. (val[ch[now][1]]+=addv[now])%=mod,
  74. (sumv[ch[now][1]]+=(ll)siz[ch[now][1]]*addv[now]%mod)%=mod,
  75. (addv[ch[now][1]]+=addv[now])%=mod;
  76. }
  77. addv[now]=0;
  78. }
  79. }
  80. void split(int&now,int p,int&x,int&y) // 将now所代表的子树位置大于等于p的分到y,其余的分到x
  81. {
  82. // cerr<<"spliting "<<now<<" "<<p<<endl;
  83. if(!now)
  84. {
  85. x=y=0;
  86. return;
  87. }
  88. pushdown(now);
  89. if(pos[now]>=p)
  90. {
  91. // cerr<<"right"<<endl;
  92. y=now;
  93. split(ch[y][0],p,x,ch[y][0]); // edit 1
  94. pushup(y);
  95. }
  96. else
  97. {
  98. // cerr<<"left"<<endl;
  99. x=now;
  100. split(ch[x][1],p,ch[x][1],y);
  101. pushup(x);
  102. }
  103. }
  104. int merge(int x,int y) // 合并x子树和y子树,满足x子树中的每一个节点的位置大于y子树中的每一个节点的位置
  105. {
  106. // cerr<<"merging "<<x<<" "<<y<<endl;
  107. if(!x||!y)
  108. {
  109. return x+y;
  110. }
  111. int now;
  112. if(pri[x]<pri[y])
  113. {
  114. pushdown(x);
  115. now=x;
  116. ch[now][1]=merge(ch[x][1],y);
  117. }
  118. else
  119. {
  120. pushdown(y);
  121. now=y;
  122. ch[now][0]=merge(x,ch[y][0]);
  123. }
  124. pushup(now);
  125. return now;
  126. }
  127. void ins(int&now,int p,int v) // 插入
  128. {
  129. int x,y;
  130. split(now,p,x,y);
  131. now=merge(x,merge(newnode(p,v),y));
  132. }
  133. int del(int &now,int p) // 删除,返回被删的子树(其实就是节点)
  134. {
  135. int x,y,z;
  136. split(now,p,x,y);
  137. split(y,p+1,y,z);
  138. now=merge(x,z);
  139. return y;
  140. }
  141. void add(int&now,int l,int r,int v) // 区间加
  142. {
  143. int x,y,z;
  144. split(now,l,x,y);
  145. split(y,r+1,y,z);
  146. if(y) // edit 3:非空才加
  147. {
  148. (val[y]+=v)%=mod,
  149. (sumv[y]+=(ll)siz[y]*v%mod)%=mod,
  150. (addv[y]+=v)%=mod;
  151. }
  152. now=merge(x,merge(y,z));
  153. }
  154. int qsum(int&now,int p) // 子树(其实就是节点)求和
  155. {
  156. int x,y,z;
  157. split(now,p,x,y);
  158. split(y,p+1,y,z);
  159. int ans=sumv[y]; // y一定存在
  160. now=merge(x,merge(y,z));
  161. // cerr<<"qsum "<<now<<" "<<p<<" ans="<<ans<<endl;
  162. return ans;
  163. }
  164. int qnum(int&now,int l,int r) // 子树中位置在区间[l,r]中的节点的个数
  165. {
  166. int x,y,z;
  167. split(now,l,x,y);
  168. split(y,r+1,y,z);
  169. int ans=siz[y];
  170. now=merge(x,merge(y,z));
  171. // cerr<<"qnum "<<now<<" "<<l<<" "<<r<<" ans="<<y<<" siz="<<siz[y]<<endl;
  172. return ans;
  173. }
  174. }T;
  175. struct Add // 区间加以及单点修改操作
  176. {
  177. int opt;
  178. int t,l,r,x,y;
  179. }A[MAXN];
  180. int a;
  181. struct Quiz // 查询操作
  182. {
  183. int t,id,l,r;
  184. bool operator<(const Quiz&rhs)const
  185. {
  186. return bl[l]^bl[rhs.l]?l<rhs.l:(bl[r]<bl[rhs.r]?r<rhs.r:t<rhs.t);
  187. }
  188. }Q[MAXN];
  189. int ans[MAXN],q;
  190. int qt,ql,qr,sum;
  191. void addAdd(int rk) // 加上A[rk]
  192. {
  193. // cerr<<"addAdd "<<rk<<endl;
  194. if(A[rk].opt==1) // 区间加
  195. {
  196. if(ql<=A[rk].r&&A[rk].l<=qr) // 修改区间与莫队区间有交
  197. (sum+=(ll)T.qnum(root[A[rk].x],max(ql,A[rk].l),min(qr,A[rk].r))*A[rk].y%mod)%=mod;
  198. T.add(root[A[rk].x],A[rk].l,A[rk].r,A[rk].y);
  199. }
  200. else // 单点修改
  201. {
  202. int nd=T.del(root[c[A[rk].x]],A[rk].x);
  203. c[A[rk].x]=A[rk].y;
  204. T.ins(root[A[rk].y],A[rk].x,T.val[nd]);
  205. pool.push(nd);
  206. }
  207. }
  208. void delAdd(int rk) // 减去A[rk]
  209. {
  210. // cerr<<"delAdd "<<rk<<endl;
  211. if(A[rk].opt==1)
  212. {
  213. if(ql<=A[rk].r&&A[rk].l<=qr)
  214. (sum+=mod-(ll)T.qnum(root[A[rk].x],max(ql,A[rk].l),min(qr,A[rk].r))*A[rk].y%mod)%=mod;
  215. T.add(root[A[rk].x],A[rk].l,A[rk].r,mod-A[rk].y);
  216. }
  217. else
  218. {
  219. int nd=T.del(root[c[A[rk].x]],A[rk].x);
  220. c[A[rk].x]=pre[rk];
  221. T.ins(root[pre[rk]],A[rk].x,T.val[nd]);
  222. pool.push(nd);
  223. }
  224. }
  225. void addQuiz(int p) // 莫队区间加上点
  226. {
  227. // cerr<<"addQuiz "<<p<<endl;
  228. (sum+=T.qsum(root[c[p]],p))%=mod;
  229. }
  230. void delQuiz(int p) // 莫队区间减去点
  231. {
  232. // cerr<<"delQuiz "<<p<<endl;
  233. (sum+=mod-T.qsum(root[c[p]],p))%=mod;
  234. }
  235. int main()
  236. {
  237. freopen("color.in","r",stdin);
  238. freopen("color.out","w",stdout);
  239. srand(20030506);
  240. int n,m;
  241. read(n),read(m);
  242. blo=pow(n,2.0/3);
  243. for(int i=1;i<=n;++i)
  244. {
  245. bl[i]=(i-1)/blo+1;
  246. }
  247. for(int i=1;i<=n;++i)
  248. {
  249. now[i]=read(c[i]);
  250. T.ins(root[c[i]],i,0);
  251. }
  252. for(int i=1;i<=m;++i)
  253. {
  254. int opt;
  255. read(opt);
  256. if(opt==1)
  257. {
  258. A[++a].opt=1,A[a].t=i;
  259. read(A[a].l),read(A[a].r),read(A[a].x),read(A[a].y);
  260. }
  261. else if(opt==2)
  262. {
  263. Q[++q].t=i,Q[q].id=q;
  264. read(Q[q].l),read(Q[q].r);
  265. }
  266. else if(opt==3)
  267. {
  268. A[++a].opt=3,A[a].t=i;
  269. read(A[a].x),read(A[a].y);
  270. pre[a]=now[A[a].x];
  271. now[A[a].x]=A[a].y;
  272. }
  273. }
  274. A[++a].t=1e9;
  275. sort(Q+1,Q+q+1);
  276. qt=0,ql=1,qr=0,sum=0;
  277. for(int i=1;i<=q;++i)
  278. {
  279. while(A[qt+1].t<=Q[i].t)
  280. {
  281. addAdd(++qt);
  282. }
  283. while(A[qt].t>Q[i].t)
  284. {
  285. delAdd(qt--);
  286. }
  287. while(qr<Q[i].r)
  288. {
  289. addQuiz(++qr);
  290. }
  291. while(qr>Q[i].r)
  292. {
  293. delQuiz(qr--);
  294. }
  295. while(ql>Q[i].l)
  296. {
  297. addQuiz(--ql);
  298. }
  299. while(ql<Q[i].l)
  300. {
  301. delQuiz(ql++);
  302. }
  303. ans[Q[i].id]=sum;
  304. }
  305. for(int i=1;i<=q;++i)
  306. {
  307. printf("%d\n",ans[i]);
  308. }
  309. return 0;
  310. }
  311. /*
  312. 10 10
  313. 1 9 9 2 9 4 1 2 6 9
  314. 3 10 10
  315. 2 7 9
  316. 1 8 9 2 8
  317. 1 2 2 3 7
  318. 2 3 6
  319. 3 8 8
  320. 1 2 4 3 1
  321. 1 2 10 1 9
  322. 2 7 10
  323. 2 1 10
  324. */

W学霸的做法

直接分块,对每个颜色维护。

代码清晰易懂,并且跑得飞快。

时间复杂度\(O(n \sqrt{n})\)

  1. #include<cstdlib>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<iostream>
  6. #include<string>
  7. #include<vector>
  8. #include<list>
  9. #include<deque>
  10. #include<stack>
  11. #include<queue>
  12. #include<map>
  13. #include<set>
  14. #include<bitset>
  15. #include<algorithm>
  16. #include<complex>
  17. #include<cassert>
  18. #define rg register
  19. #define il inline
  20. #define co const
  21. #pragma GCC optimize ("O0")
  22. using namespace std;
  23. template<class T> il T read()
  24. {
  25. T data=0;
  26. int w=1;
  27. char ch=getchar();
  28. while(!isdigit(ch))
  29. {
  30. if(ch=='-')
  31. w=-1;
  32. ch=getchar();
  33. }
  34. while(isdigit(ch))
  35. data=10*data+ch-'0',ch=getchar();
  36. return data*w;
  37. }
  38. template<class T> il T read(T&x)
  39. {
  40. return x=read<T>();
  41. }
  42. typedef long long ll;
  43. const int INF=0x7fffffff;
  44. const int MAXN=1e5+7,mod=998244353;
  45. int n,m,len;
  46. int bl[MAXN],c[MAXN],a[MAXN];
  47. int cnt[350][MAXN];
  48. int laz[350][MAXN];
  49. int ans[350];
  50. int mul(int x,int y)
  51. {
  52. return (ll)x*y%mod;
  53. }
  54. int add(int x,int y)
  55. {
  56. return (x+y)%mod;
  57. }
  58. int pul(int x,int y)
  59. {
  60. return (x+mod-y)%mod;
  61. }
  62. void change(int l,int r,int x,int y)
  63. {
  64. if(bl[l]!=bl[r])
  65. {
  66. for(int i=bl[l]+1;i<bl[r];++i)
  67. {
  68. laz[i][x]=add(laz[i][x],y);
  69. ans[i]=add(ans[i],mul(cnt[i][x],y));
  70. }
  71. for(int i=l;i<=bl[l]*len;++i)
  72. if(c[i]==x)
  73. {
  74. ans[bl[i]]=add(ans[bl[i]],y);
  75. a[i]=add(a[i],y);
  76. }
  77. for(int i=(bl[r]-1)*len+1;i<=r;++i)
  78. if(c[i]==x)
  79. {
  80. ans[bl[i]]=add(ans[bl[i]],y);
  81. a[i]=add(a[i],y);
  82. }
  83. }
  84. else
  85. {
  86. for(int i=l;i<=r;++i)
  87. if(c[i]==x)
  88. {
  89. ans[bl[i]]=add(ans[bl[i]],y);
  90. a[i]=add(a[i],y);
  91. }
  92. }
  93. }
  94. int query(int l,int r)
  95. {
  96. int res=0;
  97. if(bl[l]!=bl[r])
  98. {
  99. for(int i=bl[l]+1;i<bl[r];++i)
  100. {
  101. res=add(res,ans[i]);
  102. }
  103. for(int i=l;i<=bl[l]*len;++i)
  104. {
  105. res=add(res,add(a[i],laz[bl[i]][c[i]]));
  106. }
  107. for(int i=(bl[r]-1)*len+1;i<=r;++i)
  108. {
  109. res=add(res,add(a[i],laz[bl[i]][c[i]]));
  110. }
  111. }
  112. else
  113. {
  114. for(int i=l;i<=r;++i)
  115. {
  116. res=add(res,add(a[i],laz[bl[i]][c[i]]));
  117. }
  118. }
  119. return res;
  120. }
  121. int main()
  122. {
  123. freopen("color.in","r",stdin);
  124. freopen("color.out","w",stdout);
  125. read(n);read(m);
  126. len=sqrt(n);
  127. for(int i=1;i<=n;++i)
  128. {
  129. bl[i]=(i-1)/len+1;
  130. read(c[i]);
  131. ++cnt[bl[i]][c[i]];
  132. }
  133. int opt,l,r,x,y;
  134. for(int i=1;i<=m;++i)
  135. {
  136. read(opt);
  137. if(opt==1)
  138. {
  139. read(l);read(r);read(x);read(y);
  140. change(l,r,x,y);
  141. }
  142. else if(opt==2)
  143. {
  144. read(l);read(r);
  145. printf("%d\n",query(l,r));
  146. }
  147. else
  148. {
  149. read(x);read(y);
  150. if(c[x]==y)
  151. continue;
  152. --cnt[bl[x]][c[x]];
  153. a[x]=add(a[x],laz[bl[x]][c[x]]);
  154. if(!cnt[bl[x]][c[x]])
  155. laz[bl[x]][c[x]]=0;
  156. c[x]=y;
  157. a[x]=pul(a[x],laz[bl[x]][c[x]]);
  158. ++cnt[bl[x]][c[x]];
  159. }
  160. }
  161. // fclose(stdin);
  162. // fclose(stdout);
  163. return 0;
  164. }

标解

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <string>
  4. #include <cmath>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <map>
  8. #include <set>
  9. #include <queue>
  10. #include <vector>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned int uint;
  14. typedef unsigned long long ull;
  15. typedef pair<int, int> PII;
  16. #define fi first
  17. #define se second
  18. #define MP make_pair
  19. int read()
  20. {
  21. int v = 0, f = 1;
  22. char c = getchar();
  23. while (c < 48 || 57 < c) {if (c == '-') f = -1; c = getchar();}
  24. while (48 <= c && c <= 57) v = (v << 3) + v + v + c - 48, c = getchar();
  25. return v * f;
  26. }
  27. const int N = 300010;
  28. const ll MOD = 998244353;
  29. int n, q, B, B2;
  30. int c[N], L[N], R[N], belong[N], d[N], now[N], mx[N], op[N][10], _c[N];
  31. ll a[N], f[N], num[600][600], g[600][600];
  32. set<int> S[N];
  33. int main()
  34. {
  35. freopen("color.in", "r", stdin);
  36. freopen("color.out", "w", stdout);
  37. n = read(), q = read();
  38. for (int i = 1; i <= n; i++)
  39. {
  40. c[i] = _c[i] = read();
  41. S[c[i]].insert(i);
  42. now[c[i]]++;
  43. }
  44. for (int i = 1; i <= n; i++)
  45. mx[i] = now[i];
  46. for (int i = 1; i <= q; i++)
  47. {
  48. op[i][0] = read();
  49. if (op[i][0] == 1)
  50. {
  51. op[i][1] = read();
  52. op[i][2] = read();
  53. op[i][3] = read();
  54. op[i][4] = read();
  55. }
  56. if (op[i][0] == 2)
  57. {
  58. op[i][1] = read();
  59. op[i][2] = read();
  60. }
  61. if (op[i][0] == 3)
  62. {
  63. op[i][1] = read();
  64. op[i][2] = read();
  65. now[_c[op[i][1]]]--;
  66. _c[op[i][1]] = op[i][2];
  67. now[op[i][2]]++;
  68. mx[op[i][2]] = max(mx[op[i][2]], now[op[i][2]]);
  69. }
  70. }
  71. B2 = sqrt(n + q + 0.5);
  72. int cnt = 0;
  73. for (int i = 1; i <= n; i++)
  74. if (mx[i] > B2)
  75. d[i] = ++cnt;
  76. B = sqrt(n + 0.5) + 2;
  77. for (int i = 1; i <= B; i++)
  78. {
  79. L[i] = (i - 1) * B + 1;
  80. R[i] = i * B;
  81. for (int j = L[i]; j <= R[i]; j++)
  82. {
  83. belong[j] = i;
  84. if (d[c[j]])
  85. num[i][d[c[j]]]++;
  86. }
  87. }
  88. for (int j = 1; j <= q; j++)
  89. {
  90. if (op[j][0] == 1)
  91. {
  92. int l = op[j][1], r = op[j][2], x = op[j][3];
  93. ll y = op[j][4];
  94. if (d[x])
  95. {
  96. if (belong[l] == belong[r])
  97. {
  98. for (int i = l; i <= r; i++)
  99. if (c[i] == x)
  100. {
  101. a[i] = (a[i] + y) % MOD;
  102. f[belong[i]] = (f[belong[i]] + y) % MOD;
  103. }
  104. } else
  105. {
  106. for (int i = l; i <= R[belong[l]]; i++)
  107. if (c[i] == x)
  108. {
  109. a[i] = (a[i] + y) % MOD;
  110. f[belong[i]] = (f[belong[i]] + y) % MOD;
  111. }
  112. for (int i = belong[l] + 1; i <= belong[r] - 1; i++)
  113. {
  114. g[i][d[x]] = (g[i][d[x]] + y) % MOD;
  115. f[i] = (f[i] + num[i][d[x]] * y) % MOD;
  116. }
  117. for (int i = L[belong[r]]; i <= r; i++)
  118. if (c[i] == x)
  119. {
  120. a[i] = (a[i] + y) % MOD;
  121. f[belong[i]] = (f[belong[i]] + y) % MOD;
  122. }
  123. }
  124. } else
  125. {
  126. for (set<int> :: iterator i = S[x].begin(); i != S[x].end(); i++)
  127. {
  128. int u = *i;
  129. if (l <= u && u <= r)
  130. {
  131. a[u] = (a[u] + y) % MOD;
  132. f[belong[u]] = (f[belong[u]] + y) % MOD;
  133. }
  134. }
  135. }
  136. }
  137. if (op[j][0] == 2)
  138. {
  139. int l = op[j][1], r = op[j][2];
  140. ll ans = 0;
  141. if (belong[l] == belong[r])
  142. {
  143. for (int i = l; i <= r; i++)
  144. if (d[c[i]])
  145. ans = (ans + g[belong[i]][d[c[i]]] + a[i]) % MOD;
  146. else
  147. ans = (ans + a[i]) % MOD;
  148. } else
  149. {
  150. for (int i = l; i <= R[belong[l]]; i++)
  151. if (d[c[i]])
  152. ans = (ans + g[belong[i]][d[c[i]]] + a[i]) % MOD;
  153. else
  154. ans = (ans + a[i]) % MOD;
  155. for (int i = belong[l] + 1; i <= belong[r] - 1; i++)
  156. ans = (ans + f[i]) % MOD;
  157. for (int i = L[belong[r]]; i <= r; i++)
  158. if (d[c[i]])
  159. ans = (ans + g[belong[i]][d[c[i]]] + a[i]) % MOD;
  160. else
  161. ans = (ans + a[i]) % MOD;
  162. }
  163. printf("%lld\n", ans);
  164. }
  165. if (op[j][0] == 3)
  166. {
  167. int x = op[j][1], y = op[j][2];
  168. if (d[c[x]])
  169. {
  170. a[x] = (a[x] + g[belong[x]][d[c[x]]]) % MOD;
  171. num[belong[x]][d[c[x]]]--;
  172. }
  173. S[c[x]].erase(x);
  174. c[x] = y;
  175. S[c[x]].insert(x);
  176. if (d[c[x]])
  177. {
  178. a[x] = (a[x] - g[belong[x]][d[c[x]]] + MOD) % MOD;
  179. num[belong[x]][d[c[x]]]++;
  180. }
  181. }
  182. }
  183. }

test20181025 Color的更多相关文章

  1. 【转】c#、wpf 字符串,color,brush之间的转换

    转自:http://www.cnblogs.com/wj-love/archive/2012/09/14/2685281.html 1,将#3C3C3C 赋给background this.selec ...

  2. Python为8bit深度图像应用color map

    图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...

  3. (转)System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

  4. 激光打印机的Color/paper, Xerography介绍

    Color Basic 看见色彩三要素: 光源,物体,视觉 加色色彩模型:R,G,B 多用于显示器 减色色彩模型:C,M,Y,K 多用于打印复印 Paper 东亚地区常用A系列标准用纸,在多功能一体机 ...

  5. 安卓工具箱:color of Style

    <?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...

  6. UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)

    在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...

  7. OpenCASCADE Color Scale

    OpenCASCADE Color Scale eryar@163.com Abstract. The color scale is a specialized label object that d ...

  8. Color Transfer between Images code实现

    上计算机视觉课老师布置的作业实现论文:Color Transfer between Images 基本思路是: 1.给定srcImg和targetImg 2.将RGB空间转为Lab空间 3.根据论文中 ...

  9. ZOJ Problem Set - 1067 Color Me Less

    这道题目很简单,考察的就是结构体数组的应用,直接贴代码了 #include <stdio.h> #include <math.h> typedef struct color { ...

随机推荐

  1. MyBatis—mybatis-config.xml模板

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC & ...

  2. AISing Programming Contest 2019 Solution

    A - Bulletin Board 签到. #include <bits/stdc++.h> using namespace std; int main() { int n, h, w; ...

  3. Qt信号和槽连接方式的选择

    看了下Qt的帮助文档,发现connect函数最后还有一个缺省参数. connect函数原型是这样的: QMetaObject::Connection QObject::connect(const QO ...

  4. Python XML解析和处理

    movies.xml <collection shelf = "New Arrivals"> <movie title = "Enemy Behind& ...

  5. python 返回系统名称,系统平台,系统版本

    import platform import os print(os.name) print(platform.system()) print(platform.release())

  6. C++ 构造函数后加冒号

    其实冒号后的内容是初始化成员列表,一般有三种情况: 1.对含有对象成员的对象进行初始化,例如, 类line有两个私有对象成员startpoint.endpoint,line的构造函数写成: line( ...

  7. 语义化标签和media媒体查询可以放心使用

    现在的高级浏览器都支持html5,只有IE6-IE8不支持.(下面说的IE均值IE6-IE8) 有两个特性在IE是可以使用的: 1.语义化标签: header(头部) section(区块) foot ...

  8. 网络编程 单机最大tcp连接数

    在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接.那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前,先 ...

  9. 【Matplotlib】概要总览第一讲

    之前一直使用 matplotlib, 但都是随用随查,现在特开此系列帖子已记录其学习过程. Matplotlib可能是Python 扩展包中仅有的最流行的 2D 绘图库.她不仅提供了快速的方式可视化P ...

  10. 【hive】数据仓库层次设计

    转载 https://www.jianshu.com/p/849db358ec61