https://www.luogu.org/problemnew/show/2073

自己yy,明显错

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e5 + ;
  5. const int oo = ;
  6.  
  7. #define gc getchar()
  8.  
  9. struct Node{
  10. int w, b, bef;
  11. }flower[N];
  12. int Ans1, Ans2, opt, W, B, Max, Min;
  13. map<int, bool> Map;
  14. int js = , tot = ;
  15.  
  16. inline int read(){
  17. int x = , f = ; char c = gc;
  18. while(c < '' || c > '') {if(c == '-') f = -; c = gc;}
  19. while(c >= '' && c <= '') x = x * + c - '', c = gc;
  20. return x * f;
  21. }
  22.  
  23. int main()
  24. {
  25. Max = ;
  26. Min = ;
  27. opt = read();
  28. while(opt != ) opt = read();
  29. flower[Max].w = read(); flower[Max].b = read(); Map[flower[Max].w] = ;
  30. flower[Max].bef = ;
  31. while(true){
  32. opt = read();
  33. if(opt == -) break;
  34. if(opt == ){
  35. flower[++ js].w = read(); flower[js].b = read();
  36. W = flower[js].w; B = flower[js].b;
  37. if(Map[W]) {js --; continue ;} else tot ++, Map[W] = ;
  38. if(W > flower[Max].w || ! flower[Max].w) {flower[js].bef = Max; Max = js;}
  39. if(W < flower[Min].w || ! flower[Min].w) {flower[js].bef = Min; Min = js;}
  40. }
  41. else if(opt == ){
  42. if(tot <= ) continue;
  43. int ma = Max;
  44. Map[flower[Max].w] = ;
  45. flower[Max].w = ; flower[Max].b = ;
  46. Max = flower[ma].bef; flower[ma].bef = ;
  47. tot --;
  48. }
  49. else {
  50. if(tot <= ) continue;
  51. int mi = Min;
  52. Map[flower[Min].w] = ;
  53. flower[Min].w = ; flower[Min].b = ;
  54. Min = flower[mi].bef; flower[mi].bef = ;
  55. tot --;
  56. }
  57. }
  58. for(int i = ; i<= N - ; i ++)
  59. Ans1 += flower[i].w, Ans2 += flower[i].b;
  60. cout << Ans1 << " " << Ans2;
  61.  
  62. return ;
  63. }
  64. /*
  65. 1 2 2
  66. 1 7 20
  67. 3
  68. 1 16 3
  69. 1 2 16
  70. 2
  71. -1
  72.  
  73. */

以权值为下标建立权值线段树

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define ls jd<<1
  6. #define rs jd<<1|1
  7.  
  8. using namespace std;
  9. const int N = 1e6 + ;
  10. const int inf = 0x7f7f7f7f;
  11.  
  12. int opt;
  13. bool vis[N];//用来判重;
  14. struct Tree {int l, r, sumw, sumc, Min,Max;} T[N<<];
  15.  
  16. void build(int jd, int ll, int rr) {
  17. T[jd].l = ll, T[jd].r = rr, T[jd].Min = inf;
  18. if(ll == rr) return;
  19. int m = ll + rr >> ;
  20. build(ls, ll, m), build(rs, m + , rr);
  21. }
  22.  
  23. void update(int jd, int pos, int val1, int val2, int val3, int val4) {
  24. if(T[jd].l == pos && T[jd].r == pos) {
  25. T[jd].sumc = val1;
  26. T[jd].sumw = val2;
  27. T[jd].Min = val3;
  28. T[jd].Max = val4;
  29. return;
  30. }
  31. if(T[ls].r >= pos) update(ls, pos, val1, val2, val3, val4);
  32. else update(rs, pos, val1, val2, val3, val4);
  33. T[jd].sumc = T[ls].sumc + T[rs].sumc;
  34. T[jd].sumw = T[ls].sumw + T[rs].sumw;
  35. T[jd].Min = min(T[ls].Min, T[rs].Min);
  36. T[jd].Max = max(T[ls].Max, T[rs].Max);
  37. }
  38.  
  39. int main()
  40. {
  41. int n = N - ;
  42. build(, , n);
  43. while(scanf("%d", &opt) == && opt != -) {
  44. int w, c;
  45. if(opt == ) {
  46. scanf("%d %d", &w, &c);
  47. if(vis[c]) continue;
  48. update(, c, c, w, c, c);
  49. vis[c] = true;
  50. }
  51. if(opt == ) {
  52. if(T[].Min == inf) continue;//此时无花,下同;
  53. vis[T[].Min] = false, update(, T[].Min, , , inf, );
  54. }
  55. if(opt == ) {
  56. if(T[].Max == ) continue;
  57. vis[T[].Max] = false, update(, T[].Max, , , inf, );
  58. }
  59. }
  60. printf("%d %d",T[].sumw, T[].sumc);
  61. }

[Luogu] 送花的更多相关文章

  1. 【题解】Luogu P2073 送花

    原题传送门 这题需要用到Splay 我们用一棵splay维护金钱 考虑c<=1000000 我们珂以把每种价格现在对应的美丽值存在一个a数组中 这样讲有珂能不太清楚qaq,还是对着操作一个一个讲 ...

  2. luogu P2073 送花 线段树

    思路&心路 一眼认定沙比提 写的比较慢,写了1小时吧 开心的交上去 卧槽,只有20? 不服不服,拿着题解的代码去对拍 Emma,<100没问题 100000数据错了,还只是错了一个数据 ...

  3. [Luogu 2073] 送花

    很容易想到的平衡树,加个维护区间和. 只需要插入和删除操作即可. kth其实都不用的,最小和最大可以从根节点log n一直向左/一直向右跑到叶子节点而求得. 记得每插入完一个点一定要更新区间和!!更新 ...

  4. Luogu P2073 送花 set

    这题...一眼set...但是打了一会儿.. 记录一下每个价格对应的美丽度,顺便充当vis数组,如果美丽度不为0,说明set里已经有了... 删除好说,删*s.begin()和*--s.end()就好 ...

  5. Luogu P2073 送花

    权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...

  6. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  7. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

  8. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  9. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

随机推荐

  1. MGR安装记录

    装好所有MySQL5.7, 打开GTID 修改my.cnf文件: ## group replication transaction_write_set_extraction = XXHASH64 ## ...

  2. idea代码提示快捷键设置

    代码提示快捷键设置: keymap--Main Menu--Code--Completion--Basic

  3. vue 写一个炫酷的轮播图

    效果如上图: 原理: 1.利用css 的 transform 和一些其他的属性,先选五张将图片位置拍列好,剩余的隐藏 2.利用 js 动态切换类名,达到切换效果 css代码如下 .swiper-cer ...

  4. ubuntu配置fastdfs+Nginx

    全程参考主线来自:https://blog.csdn.net/xiaoxie762457/article/details/80690841(文中图片失效不造成影响) Nginx安装主要参考:https ...

  5. kafka的生产者配置以及发送信息的三种方式

    1.Fire-and-forget 这种方式是不管发送成功与否,客户端都会返回成功.尽管大多数的时候Kafka 在发送失败后,会自己重新自动再一次发送消息,但是也会存在丢失消息的风险 Producer ...

  6. Asp.Net Mvc 整站Https

    网站要使用https需要如下几个步骤 1.申请https证书,现在已经有很多免费的https证书申请了 2.服务器中安装证书 3.网站的连接全部改为https连接 Asp.Net Mvc网站中整站改为 ...

  7. iOS - Scenekit3D引擎初探之 - 导入模型+上传服务器+下载并简单设置

    SceneKit是ios8之后苹果推出了一个3D模型渲染框架. SceneKit现在可以支持有限的几种模型,截止到我写这篇文章为止似乎只有.dae和.abc后一种模型我没有使用过.这篇文章只针对.da ...

  8. 这个一个对ES6多个异步处理的并发继发思想的总结和理解

    1.首先我们需要理解的是js中for循环.forEach循环.map循环的一些差异性,直接说了为后面说到的提供一些依据 1.1 for循环最基本,也是最容易理解的. 1.2 forEach和map用法 ...

  9. java利用反射打印出类的结构

    1 输入一个类名:java.lang.String将打印出String类定义的结构,例如: public final class java.lang.String { public java.lang ...

  10. Qt布局

    常用的布局方法 1. 水平布局类 QHBoxLayout 2. 垂直布局类 QVBoxLayout 3. 网格布局类 QGridLayout QHBoxLayout 对象横向排列开 QVBoxLayo ...