1. /*
  2. 贪心 负数一定不取
  3. 枚举最高位是1 且答案取为0的 位置, 更新答案。
  4. */
  5. #include<iostream>
  6. #include<cstdio>
  7. #include<cstring>
  8.  
  9. #define ll long long
  10. #define N 100010
  11.  
  12. using namespace std;
  13. int n;
  14. ll a[N],ans,sum[N];
  15. char s[N];
  16.  
  17. ll read()
  18. {
  19. ll x=,f=;char c=getchar();
  20. while(c>''||c<''){if(c=='-')f=-;c=getchar();}
  21. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  22. return x*f;
  23. }
  24.  
  25. int main()
  26. {
  27. freopen("maximum.in","r",stdin);
  28. freopen("maximum.out","w",stdout);
  29. scanf("%d",&n);
  30. for(int i=; i<=n; i++)
  31. {
  32. a[i]=read();
  33. sum[i]=sum[i-];
  34. if(a[i]>)sum[i]=sum[i-]+a[i];
  35. }
  36. scanf("%s",s+);
  37. ll c=;
  38. for(int i=n; i>=; i--)
  39. if(s[i]=='')
  40. {
  41. ans=max(ans,c+sum[i-]);
  42. c+=max(a[i],0LL);
  43. }
  44. ans=max(ans,c);
  45. printf("%I64d\n",ans);
  46. return ;
  47. }

  1. /*
  2. 15暴力
  3. */
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<iostream>
  7. #include<algorithm>
  8.  
  9. #define N 1010
  10.  
  11. using namespace std;
  12. int n,k;
  13. int l,r,mid;
  14. int num[N],tmp[N];
  15. int ans;
  16.  
  17. int minn(int a,int b,int i)
  18. {
  19. if(a<b) return tmp[i-];
  20. else return tmp[i-]+mid;
  21. }
  22.  
  23. bool check()
  24. {
  25. int sum=;
  26. for(int i=; i<=n; i++) tmp[i]=num[i];
  27. for(int i=; i<=n; i++)
  28. if(abs(tmp[i]-tmp[i-])>mid)
  29. {
  30. if(tmp[i+]>tmp[i]) tmp[i]=max(tmp[i],tmp[i-]+mid);
  31. else tmp[i]=minn(abs(tmp[i-]-tmp[i+]),tmp[i-]+mid-tmp[i+],i);
  32. sum++;
  33. }
  34. if(sum>k) return false;
  35. else return true;
  36. }
  37.  
  38. int main()
  39. {
  40. scanf("%d%d",&n,&k);
  41. for(int i=; i<=n; i++) scanf("%d",&num[i]);
  42. l=;
  43. r=;
  44. while(l<=r)
  45. {
  46. mid=(l+r)/;
  47. if(check()) ans=mid,r=mid-;
  48. else l=mid+;
  49. }
  50. printf("%d",ans);
  51. }

不会分块

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <cstdlib>
  6. #include <ctime>
  7. using namespace std;
  8. const int maxn = ;
  9. const int len = ;
  10. int n, A, B,m;
  11. int a[maxn],b[maxn],l[maxn],r[maxn],lb[maxn],tot;
  12. int answer[][];
  13. int rt[][maxn], lt[][maxn],d[maxn];
  14. //int root[maxn*len], ll[maxn*len], rr[maxn*len],data[maxn*len];
  15. int find(int x)
  16. {
  17. for (int l = , r = m; l < r;)
  18. {
  19. int mid = (l + r) / ;
  20. if (b[mid] == x) return mid;
  21. if (b[mid]>x) r = mid;
  22. else l = mid + ;
  23. }
  24. return -;
  25. }
  26. /*int build(int l, int r)
  27. {
  28. if (l == r)
  29. {
  30. tot++;
  31. ll[tot] = rr[tot] = 0;
  32. data[tot] = d[l];
  33. return tot;
  34. }
  35. tot++;
  36. int tmp = tot;
  37. ll[tmp] = build(l, (l + r) / 2);
  38. rr[tmp] = build((l + r) / 2 + 1, r);
  39. data[tmp] = min(data[ll[tmp]], data[rr[tmp]]);
  40. return tmp;
  41. }
  42. int change(int i, int l, int r,int x)
  43. {
  44. if (l == x && r == x)
  45. {
  46. tot++;
  47. ll[tot] = rr[tot] = 0;
  48. data[tot] = n + 1;
  49. return tot;
  50. }
  51. tot++;
  52. int tmp = tot;
  53. ll[tot] = ll[i];
  54. rr[tot] = rr[i];
  55. if (l <= x && x <= (l + r) / 2) ll[tmp] = change(ll[i], l, (l + r) / 2, x);
  56. else rr[tmp] = change(rr[i], (l + r) / 2 + 1, r, x);
  57. data[tmp] = min(data[ll[tmp]], data[rr[tmp]]);
  58. return tmp;
  59. }
  60. int check(int i, int l, int r, int x, int &ans)
  61. {
  62. if (l > x) return 0;
  63. if (1 <= l && r <= x)
  64. {
  65. ans = min(ans, data[i]); return 0;
  66. }
  67. check(ll[i], l, (l + r) / 2, x, ans);
  68. check(rr[i], (l + r) / 2 + 1, r, x, ans);
  69. return 0;
  70. }*/
  71. int main()
  72. {
  73. double ti = clock();
  74. freopen("sequence.in", "r", stdin);
  75. freopen("sequence.out", "w", stdout);
  76. scanf("%d%d%d", &n, &A, &B);
  77. a[] = ;
  78. for (int i = ; i <= n; i++)
  79. {
  80. char c;
  81. for (scanf(" %c", &c); c != 'A' && c != 'B'; scanf(" %c", &c));
  82. if (c == 'A') a[i] = a[i - ] + B;
  83. else a[i] = a[i - ] - A;
  84. }
  85. for (int i = ; i <= n; i++) b[i] = a[i];
  86. sort(b, b + n + );
  87. m = unique(b, b + n + ) - b;
  88. for (int i = ; i <= n; i++)
  89. {
  90. a[i] = find(a[i]);
  91. if (a[i] == -)
  92. {
  93. printf("???\n");
  94. return ;
  95. }
  96. }
  97. n++;
  98. int k = n / len;
  99. for (int i = ; i <= k; i++)
  100. {
  101. int ans = ;
  102. tot++;
  103. for (int j = i*len; j < n; j++)
  104. {
  105. if (j%len == )
  106. {
  107. answer[i][j / len] = ans;
  108. }
  109. if (lb[a[j]] != tot)
  110. {
  111. lb[a[j]] = tot;
  112. l[a[j]] = j;
  113. }
  114. ans = max(ans, j - l[a[j]]);
  115. }
  116. }
  117. for (int i = ; i < n; i++) r[i] = -;
  118. for (int i = ; i < n; i++)
  119. {
  120. r[a[i]] = i;
  121. if (i%len == len - )
  122. {
  123. int tmp = i / len;
  124. for (int j = ; j < n; j++)
  125. rt[tmp][j] = r[j];
  126. }
  127. }
  128. for (int i = ; i < n; i++) l[i] = -;
  129. for (int i = n - ; i >= ; i--)
  130. {
  131. l[a[i]] = i;
  132. if (i%len == )
  133. {
  134. int tmp = i / len;
  135. for (int j = ; j < n; j++)
  136. lt[tmp][j] = l[j];
  137. }
  138. }
  139. int q;
  140. scanf("%d", &q);
  141. int ans = ;
  142. for (; q; q--)
  143. {
  144. int L, R;
  145. scanf("%d%d", &L, &R);
  146. L--;
  147. int kl = L / len, kr = R / len;
  148. ans = ;
  149. if (kl == kr)
  150. {
  151. tot++;
  152. for (int i = L; i <= R; i++)
  153. {
  154. if (lb[a[i]] != tot)
  155. {
  156. lb[a[i]] = tot;
  157. l[a[i]] = i;
  158. }
  159. ans = max(ans, i - l[a[i]]);
  160. }
  161. }
  162. else
  163. {
  164. ans = answer[kl + ][kr];
  165. tot++;
  166. int tmp = min(n, (kl + )*len);
  167. for (int i = L; i < tmp; i++)
  168. {
  169. if (lb[a[i]] != tot)
  170. {
  171. lb[a[i]] = tot;
  172. l[a[i]] = i;
  173. ans = max(ans, rt[kr - ][a[i]] - i);
  174. }
  175. }
  176. tmp = min(R + , n);
  177. for (int i = kr*len; i < tmp; i++)
  178. {
  179. if (lb[a[i]] != tot)
  180. {
  181. if (lt[kl + ][a[i]] != -) ans = max(ans, i - lt[kl + ][a[i]]);
  182. }
  183. else ans = max(ans, i - l[a[i]]);
  184. }
  185. }
  186. printf("%d\n", ans);
  187. }
  188. /*int q;
  189. for (scanf("%d", &q); q; q--)
  190. {
  191. // if (q % 5000 == 0) cerr << q << endl;
  192. int L, R;
  193. tot++;
  194. scanf("%d%d", &L, &R);
  195. int ans = 0;
  196. for (int i = L - 1; i <= R; i++)
  197. {
  198. if (lb[a[i]] != tot)
  199. {
  200. lb[a[i]] = tot;
  201. l[a[i]] = i;
  202. }
  203. ans = max(ans, i - l[a[i]]);
  204. }
  205. printf("%d\n", ans);
  206. }*/
  207. /*for (int i = 0; i <= n; i++)
  208. {
  209. if (lb[a[i]] == 0)
  210. {
  211. lb[a[i]] = 1;
  212. l[a[i]] = i;
  213. d[i] = n + 1;
  214. }
  215. else
  216. {
  217. r[l[a[i]]] = i;
  218. d[i] = i - l[a[i]];
  219. l[a[i]] = i;
  220. }
  221. }
  222. root[0] = build(1, n);
  223. for (int i = 1; i <= n; i++)
  224. {
  225. if (r[i-1] != 0) root[i] = change(root[i - 1], 1, n, r[i-1]);
  226. else root[i] = root[i - 1];
  227. }
  228. int q;
  229. for (scanf("%d", &q); q; q--)
  230. {
  231. int L, R;
  232. scanf("%d%d", &L, &R);
  233. L--;
  234. int ans = n + 1;
  235. check(root[L], 1, n, R, ans);
  236. if (ans == n + 1) printf("-1\n"); else printf("%d\n", ans);
  237. }*/
  238. /* int q;
  239. int tans = 0;
  240. for (scanf("%d", &q); q; q--)
  241. {
  242. int L, R;
  243. scanf("%d%d", &L, &R);
  244. L--;
  245. tot++;
  246. int ans = n + 1;
  247. for (int i = L; i <= R; i++)
  248. {
  249. if (lb[a[i]] != tot)
  250. {
  251. lb[a[i]] = tot;
  252. l[a[i]] = i;
  253. }
  254. else
  255. {
  256. ans = min(ans, i - l[a[i]]);
  257. l[a[i]] = i;
  258. }
  259. }
  260. if (ans == n + 1) printf("-1\n"); else {
  261. printf("%d\n", ans);
  262. tans = max(tans, ans);
  263. }
  264. }
  265. cerr << clock()-ti << " "<<tans<<" "<<A<<" "<<B<<endl;*/
  266. return ;
  267. }

std

清北考前刷题day6下午好的更多相关文章

  1. 清北考前刷题day1下午好

    水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽 ...

  2. 清北考前刷题da7下午好

    三向城 /* 原图一定是一棵完全二叉树. 根节点是x,左节点是x*2,右节点是x*2+1 转化为二进制往左右走就很明显了. */ #include<iostream> #include&l ...

  3. 清北考前刷题day3下午好

    /* 可以并查集维护 可以发现,某个联通快出现大于等于2个环,一定无法分配. 有解要么一个环,要么没有环. 一个环时答案等于点数乘2(顺时针或逆时针). 没有环是树,对于一个n个点的树,方案一定有n种 ...

  4. 清北考前刷题da5下午好

    /* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...

  5. 清北考前刷题day4下午好

    /* 辗转相除,每次计算多出现了几个数. */ #include<iostream> #include<cstdio> #include<cstring> #inc ...

  6. 清北考前刷题day2下午好

    #include<iostream> #include<cstdio> #include<cstring> #include<stack> #defin ...

  7. 清北考前刷题day6早安

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...

  8. 清北考前刷题day4早安

      LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...

  9. 清北考前刷题day7早安

随机推荐

  1. Light oj-1100 - Again Array Queries,又是这个题,上次那个题用的线段树,这题差点就陷坑里了,简单的抽屉原理加暴力就可以了,真是坑~~

                                                                              1100 - Again Array Queries ...

  2. String replaceAll-正则匹配-截取以指定字符开头,以指定字符结尾的字符串

    scala代码块 截取以某个字符开头,以某个字符结尾的字符串 def main(args: Array[String]): Unit = { val s = "{{a61,a2,a3},{b ...

  3. j简单的分类实现-K近邻

          dataSetSize=dataSet.shape[0]                          voteIlabel=labels[sortedDistIndicies[i]] ...

  4. zoj4710暴力

    #include<stdio.h> #include<string.h> #define N 110 int map[N][N]; int main() { int n,m,k ...

  5. hdu 1075 字典树

    #include<stdio.h> #include<iostream> struct node { int num,i; node *a[27]; char s[20];// ...

  6. openjudge7624 山区建小学

    描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < ...

  7. 【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经(转)

    应届生上泡了两年,一直都是下资料,下笔试题,面试题.一直都在感谢那些默默付出的人.写这个帖子花了我两 个夜晚的时间,不是为了炫耀,只是为了能给那些“迷惘”的学弟学妹,一点点建议而已.大家何必那么认真, ...

  8. 【编程大系】Java资源汇总

    1.学习资料: 1)Spring Boot 那些事:https://www.w3cschool.cn/springboot/ 对应的 gitHub代码: https://github.com/Jeff ...

  9. 学习日常笔记<day09>Http协议

    1 Http协议入门 1.1 什么是http协议 http协议: 对浏览器客户端 和  服务器端 之间数据传输的格式规范 1.2 查看http协议的工具 1)使用火狐的firebug插件(右键-> ...

  10. Java电商项目-6.实现门户首页数据展示_Redis数据缓存

    目录 项目的Github地址 需求介绍 搭建Redis集群环境 下面先描述单机版redis的安装 下面将进行Redis3主3从集群环境搭建 基于SOA架构, 创建门户ashop-portal-web门 ...