最近真的是爆炸啊。。。

到现在还是有不少没改出来。。。。

所以先写一下 \(T1\) 的题解。。。。

送花

我们移动右端点,之后我们用线段树维护全局最大值。

之后还要记录上次的位置和上上次的位置。

之后每次加和减。

  1. #include<bits/stdc++.h>
  2. using std::cout; using std::endl;
  3. #define try(i,a,b) for(register signed i=a;i<=b;++i)
  4. #define throw(i,a,b) for(register signed i=a;i>=b;--i)
  5. #define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
  6. namespace xin_io
  7. {
  8. #define debug cout<<"debug"<<endl
  9. #define enum(x) cout<<#x" = "<<x<<endl;
  10. #define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
  11. char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
  12. class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &x)
  13. {
  14. register type s = 0; register int f = 1; register char ch = gc();
  15. while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
  16. while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return x = s * f,*this;
  17. }}io;
  18. }
  19. using namespace xin_io; static const int maxn = 5e6+10,inf = 1e9+7,mod = 998244353; const ll llinf = 1e18+7;
  20. #define int long long
  21. namespace xin
  22. {
  23. int lst1[maxn],lst2[maxn];
  24. class xin_seg
  25. {
  26. private:
  27. #define ls(fa) (fa << 1)
  28. #define rs(fa) (fa << 1 | 1)
  29. inline void up(int fa) {t[fa].s = std::max(t[ls(fa)].s , t[rs(fa)].s);}
  30. inline void down(int fa)
  31. {
  32. if(!t[fa].debt) return ;
  33. t[ls(fa)].s += t[fa].debt ; t[rs(fa)].s += t[fa].debt;
  34. t[ls(fa)].debt += t[fa].debt ; t[rs(fa)].debt += t[fa].debt;
  35. t[fa].debt = 0;
  36. }
  37. public:
  38. class xin_tree{public:int s,debt;}t[maxn];
  39. void update(int fa,int l,int r,int ql,int qr,int val)
  40. {
  41. if(ql <= l and qr >= r)
  42. {
  43. t[fa].s += val;
  44. t[fa].debt += val;
  45. return ;
  46. }
  47. register int mid = l + r >> 1;
  48. down(fa);
  49. if(ql <= mid) update(ls(fa),l,mid,ql,qr,val);
  50. if(qr > mid) update(rs(fa),mid+1,r,ql,qr,val);
  51. up(fa);
  52. }
  53. }t;
  54. int n,c[maxn],d[maxn],m;
  55. int ans = -inf;
  56. inline short main()
  57. {
  58. io >> n >> m;
  59. try(i,1,n) io >> c[i];
  60. try(i,1,m) io >> d[i];
  61. try(i,1,n)
  62. {
  63. // cout<<"i = "<<i<<" c[i] = "<<c[i]<<" lst1[c[i]] = "<<lst1[c[i]]<<" lst2[c[i]] = "<<lst2[c[i]]<<endl;
  64. if(!lst1[c[i]] and !lst2[c[i]]) t.update(1,1,n,1,i,d[c[i]]);
  65. else if(lst1[c[i]] and !lst2[c[i]]) t.update(1,1,n,lst1[c[i]]+1,i,d[c[i]]),t.update(1,1,n,1,lst1[c[i]],-d[c[i]]);
  66. else t.update(1,1,n,lst2[c[i]]+1,lst1[c[i]],-d[c[i]]),t.update(1,1,n,lst1[c[i]]+1,i,d[c[i]]);
  67. ans = std::max(ans,t.t[1].s);
  68. // enum(t.t[1].s);
  69. lst2[c[i]] = lst1[c[i]];
  70. lst1[c[i]] = i;
  71. }
  72. cout<<ans<<endl;
  73. return 0;
  74. }
  75. }
  76. signed main() {return xin::main();}

[考试总结]noip模拟40的更多相关文章

  1. 2021.8.15考试总结[NOIP模拟40]

    T1 送花 线段树.枚举右端点,线段树记录左端点对应的值. 每次对当前颜色上上次出现的位置到上次出现的位置区间减,上次出现的位置到当前位置区间加. $code:$ 1 #include<bits ...

  2. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  5. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  6. 20190908 NOIP 模拟40

    考试过程: 刚看完题,发现T1是个类lis 问题,但要求$O(nlogn)$,应该是个数据结构优化dp,T2应该是个数据结构,T3是个字符串?没有匹配,不会是后缀数组吧,这是NOIP模拟啊,可能是个d ...

  7. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  8. 6.11考试总结(NOIP模拟7)

    背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...

  9. 6.7考试总结(NOIP模拟5)

    前言 昨天说好不考试来着,昨晚就晚睡颓了一会,今天遭报应了,也没好好考,考得挺烂的就不多说了. T1 string 解题思路 比赛上第一想法就是打一发sort,直接暴力,然后完美TLE40pts,这一 ...

随机推荐

  1. 【动画消消乐 】HTML+CSS 吃豆豆动画 073

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  2. ASPX页面传参中文乱码处理

    前端 function() { var msg='这是一段中文参数'; window.location.href="New.aspx?name="+escape(msg); } 后 ...

  3. 打开JAVA之门:idea的安装及JAVA环境的创建

    打开JAVA之门:idea的安装及JAVA环境的创建 1.idea的下载安装 首先打开 ->->->(IntelliJ IDEA: The Capable & Ergonom ...

  4. linux之frp服务部署(内网穿透)

    frp服务部署(内网穿透) 目的 更快的进行内网穿透调试以及云端开发测试 服务器为CentOS 7,客户端为win11 frp介绍 frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 ...

  5. 洛谷P2962题解

    题面 看到 \(n \leq 35\) ,这是一个非常小的数据,但是 \(O(2^n)\) 的暴力跑不过去,所以考虑玄学做法 \(\text{Meet in Middle}\) .就是先做左边,然后做 ...

  6. fiddler 之 返回数据乱码解决方法

    1.有时用fiddler抓包, 发现抓到的包, 发送数据和返回数据都是乱码, 怎么办?   直接上图  (这办法不是100%成功的) 方法一: 方法二:

  7. 【Android面试查漏补缺】之Handler详解,带你全面理解Handler消息机制

    在安卓面试中,关于 Handler 的问题是必备的,但是这些关于 Handler 的知识点你都知道吗? 一.题目层次 Handler 的基本原理 子线程中怎么使用 Handler MessageQue ...

  8. Spring对Controller、Service、Dao进行Junit单元测试总结

    测试类注解 @RunWith(SpringRunner.class) @SpringBootTest(classes={DemoApplication.class}) 以Controller层的的单元 ...

  9. java8-stream常用操作(1)

    前言 java8的Stream 流式操作,用于对集合进行投影.转换.过滤.排序.去重等,更进一步地说,这些操作能链式串联在一起使用,类似于 SQL 语句,可以大大简化代码.下面我就将平时常用的一些st ...

  10. [11 Go语言基础-可变参数函数]

    [11 Go语言基础-可变参数函数] 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数. 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最 ...