枚举左区间线段树维护最大值

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cmath>
  8. #include<queue>
  9. #include<set>
  10. #include<map>
  11. #define ll long long
  12. #define mod 999911659 //2 3 4679 35617
  13. #define N 5000051
  14. using namespace std;
  15. int sc()
  16. {
  17. int i=0,f=1; char c=getchar();
  18. while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
  19. while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
  20. return i*f;
  21. }
  22. long long mx[N],tag[N],ans;
  23. int p[N/5],nxt[N/5],n,m,w[N/5],f[N/5];
  24. void push_down(int x)
  25. {
  26. if(tag[x])
  27. {
  28. int l=x<<1,r=x<<1|1;
  29. tag[l]+=tag[x];
  30. tag[r]+=tag[x];
  31. mx[l]+=tag[x];
  32. mx[r]+=tag[x];
  33. tag[x]=0;
  34. }
  35. }
  36. void change(int x,int L,int R,int l,int r,int v)
  37. {
  38. if(l==L&&R==r)
  39. {
  40. mx[x]+=v;
  41. tag[x]+=v;
  42. return;
  43. }
  44. push_down(x);
  45. int mid=L+R>>1;
  46. if(r<=mid)change(x<<1,L,mid,l,r,v);
  47. else if(l>mid)change(x<<1|1,mid+1,R,l,r,v);
  48. else change(x<<1,L,mid,l,mid,v),change(x<<1|1,mid+1,R,mid+1,r,v);
  49. mx[x]=max(mx[x<<1],mx[x<<1|1]);
  50. }
  51. int main()
  52. {
  53. n=sc();m=sc();
  54. for(int i=1;i<=n;i++)f[i]=sc();
  55. for(int i=1;i<=m;i++)w[i]=sc();
  56. for(int i=n;i>=1;i--)nxt[i]=p[f[i]],p[f[i]]=i;
  57. for(int i=1;i<=m;i++)
  58. {
  59. if(!p[i])continue;
  60. int y=nxt[p[i]]?
  61. nxt[p[i]]:n+1;
  62. change(1,1,n+1,p[i],y-1,w[i]);
  63. }
  64. for(int i=1;i<=n;i++)
  65. {
  66. ans=max(ans,mx[1]);
  67. int y=nxt[i]?nxt[i]:n+1;
  68. change(1,1,n+1,i,y-1,-w[f[i]]);
  69. if(y!=n+1)
  70. {
  71. int t=nxt[y]?nxt[y]:n+1;
  72. change(1,1,n+1,y,t-1,w[f[i]]);
  73. }
  74. }
  75. cout<<ans;
  76. }

3747: [POI2015]Kinoman|线段树的更多相关文章

  1. Bzoj 3747: [POI2015]Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 222[Submit][Stat ...

  2. 【BZOJ3747】[POI2015]Kinoman 线段树

    [BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...

  3. BZOJ 3747 POI2015 Kinoman 段树

    标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...

  4. 【bzoj3747】[POI2015]Kinoman 线段树区间合并

    题目描述 一个长度为n的序列,每个数为1~m之一.求一段连续子序列,使得其中之出现过一次的数对应的价值之和最大. 输入 第一行两个整数n,m(1<=m<=n<=1000000). 第 ...

  5. 【bzoj3747】[POI2015]Kinoman - 线段树(经典)

    Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...

  6. BZOJ3747:[POI2015]Kinoman(线段树)

    Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...

  7. 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 830  Solved: 338 Description ...

  8. 【BZOJ-3747】Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 715  Solved: 294[Submit][Stat ...

  9. BZOJ_3747_[POI2015]Kinoman_线段树

    BZOJ_3747_[POI2015]Kinoman_线段树 Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放 ...

随机推荐

  1. Python+Selenium练习篇之10-刷新当前页面

    本文介绍如何调用webdriver中刷新页面的方法. 相关脚本代码如下: # coding=utf-8import timefrom selenium import webdriver driver ...

  2. 基于单层决策树的AdaBoost算法源码

    基于单层决策树的AdaBoost算法源码 Mian.py # -*- coding: utf-8 -*- # coding: UTF-8 import numpy as np from AdaBoos ...

  3. Spring框架annotation实现IOC介绍

    Spring学习笔记(三) 续Spring 学习笔记(二)之后,对Spring框架的annotation实现方法进行整理 本文目录 @Autowire 1 @Autowire+@Qualifier t ...

  4. vivo和OPPO手机刷机

    vivo和OPPO手机是蓝绿两厂,定位年轻时尚女士,比较注重拍照和听音乐,其他无视. 系统很少更新,Root和刷机也比较困难,建议是直接卡刷. 小米手机耍猴(猴子精,代指懂点手机的人) 蓝绿两厂是耍猪 ...

  5. iOS开发UI篇—CALayer

      一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全 ...

  6. BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)

    [SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...

  7. java连接mysql数据库 三 实现增删改查操作

    同以前一样,先写一个数据库打开和关闭操作类 public class DBConnection { String driver = "com.mysql.jdbc.Driver"; ...

  8. 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。

    本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...

  9. input聚焦时,滚动至可视区域

    这里的代码来自vux,觉得vux处理得很好,在此记录一下. 当我们在手机上填表单的时候,我们会希望正在填的input或者textarea会自动滚动至可视区域,方便我们边填写边查看内容.以前我的做法是, ...

  10. cocoapods的安装使用

    本文非原创,只是看了别人的教程,自己做了下笔记 转载cocoapods其他详细教程 mac快速安装 由于天朝的那堵墙的阻挡,我们需要用taobao的镜像 以下操作在终端进行 gem sources - ...