cf1208E. Let Them Slide

题意:

都放在一个长度为W的框里面。有n个序到,第i个序列的长度是1。这些序到并排放在一起,每一个序列都放在一个长度为w的框里

这些序列可以在框里面滑动,但是不能划出框。

对于每一个位置,你需要求出怎样滑动可以使得这一个位置上的数的和最大

序到总长度不超过106,−109≤ai≤10910^6,-10^9≤ai≤10^9106,−109≤ai≤109

题解:

我一开始想法,对于每个位置的数,考虑其会被哪些框内的数所影响,比如第i个数,看框内通过移动哪个区间可以给第i个数做贡献,然后利用线段树查询区间最大值,代码如图

但是这样对于每一位考虑,对于每一位查询区间必T,因为复杂度是O(nwlogl)O(nwlogl)O(nwlogl)
我们仔细观察会发现,对于框内元素i,对于大部分的1<=j<=w1<=j<=w1<=j<=w,数组i中的每个位置放在j列都是合法的,只有少部分是不合法的,也就是说不合法的是少量,合法的大量,因此我们直接求合法会T,所有可以先将所有最大值累加,去除不可到达的区间的最大值。
由于数组长度不超过1e6,特判不会超过2e6,因此最多进行2e6∗log1e62e6*log1e62e6∗log1e6次操作,这样就不会超时

区间len+1到w-len-1这一段就可以省掉计算,另外头尾两端计算更新答案。

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=2e6+9;
#define int long long
int a[maxn];
int b[maxn];
struct tree{int l,r;int val;int lazy;
}tr[maxn<<1];
void pushup(int rt){tr[rt].val=max(tr[rt<<1].val,tr[rt<<1|1].val);
}
void pushdown(int rt){if(tr[rt].lazy){tr[rt<<1].val+=tr[rt].lazy;tr[rt<<1].lazy+=tr[rt].lazy;tr[rt<<1|1].lazy+=tr[rt].lazy;tr[rt<<1|1].val+=tr[rt].lazy;tr[rt].lazy=0;}
}
void build(int rt,int l,int r){tr[rt].l=l;tr[rt].r=r;if(l==r){tr[rt].val=a[l];return ;}int mid=l+r>>1;build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);pushup(rt);
}
void update(int rt,int l,int r,int val)
{if(tr[rt].l>r||tr[rt].r<l)return ;if(tr[rt].l>=l&&tr[rt].r<=r){tr[rt].lazy+=val;tr[rt].val+=val; return ;}pushdown(rt);update(rt<<1,l,r,val);update(rt<<1|1,l,r,val);pushup(rt);
}
int query(int rt,int l,int r){if(tr[rt].l>r||tr[rt].r<l)return -1e9-2;if(tr[rt].l>=l&&tr[rt].r<=r){return tr[rt].val;}pushdown(rt);return max(query(rt<<1,l,r),query(rt<<1|1,l,r));
}
signed main()
{rd_test();int n,w;cin>>n>>w;int sum=0;for(int i=1;i<=n;i++){int len;read(len);int mx=0;for(int j=1;j<=len;j++){read(a[j]);mx=max(mx,a[j]);}sum+=mx;build(1,1,len);for(int j=1;j<=min(w-len+1,len);j++){int cur=-1e9-9;int L=j+len-w,R=j;if(L<1)  cur=0,L=1;if(R>len) cur=0,R=len;cur=max(cur,query(1,L,R));b[j]+=(cur-mx);}for(int j=w;j>=max(w-(len+1),w-len+2);j--){int cur=-1e9-9;int L=j-w+len,R=j;if(L<1) cur=0,L=1;if(R>len) cur=0,R=len;cur=max(cur,query(1,L,R));b[j]+=(cur-mx);}
//      update(1,1,n,0);}for(int i=1;i<=w;i++){cout<<sum+b[i]<<" ";}cout<<endl;return 0;//Time_test();
}

cf1208E. Let Them Slide相关推荐

  1. 使用javascript oop开发滑动(slide) 菜单控件

    这里使用原生的javascript,用面向对象的方式创建一个容易维护使用方便的滑动菜单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...

  2. 为Zepto添加Slide动画效果

    一.缘由 公司的移动端项目,采用zepto为主要框架,但是zepto毕竟是精简版的jquery,体积小了,功能自然没有这么强大,特别是动画和选择器这两块,需要我们自己去拓展. 在项目开发过程中,很多页 ...

  3. Amazing Slide(图片轮播制作工具)中文版

    安装教程 1.下载软件包解压,运行"amazingslider710.exe"安装软件,选择安装目录,点击安装. 2.正在安装软件,请稍等. 3.安装完成,点击完成安装.资源地址: ...

  4. JS配合css实现slide文字框缩放伸展效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="content" content=&quo ...

  5. Jquery Mobile转场特效之slide | 小小iPhone开发

    Jquery Mobile转场特效之slide | 小小iPhone开发 2012 Jquery Mobile转场特效之slide 作者:小小   发布:2012-12-12 14:03   分类:j ...

  6. 分享一个slide:花式自然语言处理

    这是前两天在华南师范大学进行交流的时候所用的slide,主要介绍了自然语言处理的一些技巧. 这个slide的出发点是:国内高校很多搞NLP的小组基本都停留在RNN的思维中,所以我介绍了CNN.Atte ...

  7. 重庆邮电大学计算机学院院徽,Slide计算机学院-重庆邮电大学.PPT

    Slide计算机学院-重庆邮电大学 浮点数的表示 字符编码 西文字符编码 采用ASCII字符(7位二进制字符)进行编码,共128个字符 其中,控制字符:0-32,127:普通字符:94个 常用字符的A ...

  8. 修改 Powerpoint 的 Master slide

    例如我想把这个 slide 的 logo 去掉: 菜单 View->Slide Master: 删除之后,添加新的 logo: 更多Jerry的原创文章,尽在:"汪子熙":

  9. iOS 两种方法实现左右滑动出现侧边菜单栏 slide view

        现在很多的APP中都有slide view,左右滑动出现侧边菜单栏的功能,Weico这个应用就有. 网上有很多第三方的类库实现了这种效果,其实自己代码写的话也是很简单的,下面我将介绍两种方法实 ...

最新文章

  1. 有存款,才能过得更踏实
  2. 计算机IO系列(二)BIO/NIO/多路复用实现
  3. 嵌入式C语言之位运算 ..|.~.
  4. NOIP2018没有什么新闻
  5. 定义一个圆的类,输入半径,计算周长和面积并输出
  6. Watir API介绍
  7. 面向对象编程(OOP)特性 类和对象
  8. 信么?PrintDemon 漏洞影响自1996年起发布的所有 Windows 版本
  9. 入门mysql执行计划
  10. csdn markdown 的使用 (二)
  11. 倍增(LCA与ST表)
  12. LLVM语言参考手册之标识符、类型与常量
  13. php中dump是什么文件怎么打开,Win8/Win10 dump文件怎么打开?dump文件分析工具下载及使用教程...
  14. 操作系统原理实验报告——读者写者
  15. 【无标题】CentOS7 安装 向日葵 远程工具
  16. python 多张图片合成pdf_Python多图片合并PDF的方法
  17. QDU首届易途杯大赛-kk与cillyb的荣誉之战
  18. 【LGP5108】仰望半月的夜空
  19. 编译原理支配树部分名词介绍
  20. 如何使用手机作为树莓派的显示屏幕

热门文章

  1. 动点移动轨迹,猜猜这是曲线还是直线?
  2. 怪不得超市不让带宠物...
  3. 百般受虐!“波士屯动力”机器人这一次枪口对准人类
  4. 每日一笑 | 你知道程序媛最“大”的烦恼是什么吗?
  5. 宝宝学数学的第一套书,秒杀题海战术!上小学前应该这样学数学!
  6. 干货|MIT线性代数课程精细笔记[第一课]
  7. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)
  8. ubuntu 没有php.ini,linux – 在Ubuntu中我对php.ini进行了更改,但没有任何反应
  9. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志
  10. element 方法返回的boolean被当成字符串了_13个需要知道的方法:使用 JavaScript 来操作 DOM...