Codeforce 218 div2
D
一开始想错了,试图用"前缀和-容量"来求从上层流下来了多少水",但这是错的,因为溢出可能发生在中间.
然后发现对于每层,溢出事件只会发生一次,所以可以用类似并查集的办法,在每次加水后直接更新每层的容量就行了.
E
推出公式后发现只要预处理坐标前缀和sum[]和sum的前缀和ssum[]就可以在o(1)时间内求出给定区间的答案,
接下来枚举区间就行了(区间长度是给定的):
左端点右移,需要先删除第一个点,相当于后面每个点产生的统计值减去一个值v,v可以利用sum快速计算;
添加右端点,需要加上一个值v,v可以利用sum和ssum快速计算.
- struct node
- {
- int id;
- llong v;
- };node x[maxn];
- llong n,k,sum[maxn],ssum[maxn];
- llong getsum(int l,int r){return l==?sum[r]:sum[r]-sum[l-];}
- llong getssum(int l,int r)
- {
- if (l<=)
- {
- if (r<) return 0ll;
- return ssum[r];
- }else return ssum[r]-ssum[l-];
- }
- bool cmp(node u,node v) {return u.v<v.v;}
- int main()
- {
- // freopen("test.txt","r",stdin);
- scanf("%I64d",&n);
- for (int i= ; i<=n ; i++ )
- {
- scanf("%I64d",&x[i].v);
- x[i].id = i;
- }
- sort(x+,x++n,cmp);
- // for (int i=1 ; i<=n ; i++ ) printf("%I64d%c",x[i].v,i==n?'\n':' ');
- scanf("%I64d",&k);
- for (int i= ; i<=n ; i++ ) sum[i] = sum[i-]+x[i].v;
- for (int i= ; i<=n ; i++ ) ssum[i] = ssum[i-]+sum[i];
- llong f=;
- llong ans;
- int p=;
- // printf("sum:\n");
- // for (int i=1 ; i<=n ; i++ ) printf("%I64d%c",sum[i],i==n?'\n':' ');
- // printf("ssum:\n");
- // for (int i=1 ; i<=n ; i++ ) printf("%I64d%c",ssum[i],i==n?'\n':' ');
- for (int i= ; i<=n ; i++ )
- {
- if (i<k) f += (llong)(i+)*x[i].v;
- else
- {
- f -= getsum(i-k,i-);
- f += k*x[i].v;
- llong a = getssum(i-k+,i)-k*sum[i-k];
- llong b = getssum(i-k,i-)-k*sum[i-k];
- llong c = getsum(i-k+,i);
- llong tmp = 2ll*f-a-b-c;
- // printf("i=%d f=%I64d a=%I64d b=%I64d c=%I64d tmp=%I64d\n",i,2ll*f,a,b,c,tmp);
- if (!p||ans>tmp)
- ans = tmp,p=i;
- }
- }
- for (int i=p-k+ ; i<=p ; i++ ) printf("%d%c",x[i].id,i==p?'\n':' ');
- return ;
- }
Codeforce 218 div2的更多相关文章
- Codeforce Round #218 Div2
A:没个元素的个数少的变成多的和就是了 B:居然被systemtest搓掉了- -分东西,我改的代码,还是shit一样的过的...别人的直接两个操作数相减就可以了! C:二分题- -,没想到比赛时因为 ...
- codeforce 192 div2解题报告
今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判.... A. Cakeminator 题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在.这道题目,就是判断一 ...
- Codeforce 287 div2 C题
题目链接:http://codeforces.com/contest/507/problem/C 解题报告:现在有一个满二叉树型的迷宫,入口在根结点,出口在第n个叶节点,有一串命令,LRLRLRLRL ...
- codeforce #339(div2)C Peter and Snow Blower
Peter and Snow Blower 题意:有n(3 <= n <= 100 000)个点的一个多边形,这个多边形绕一个顶点转动,问扫过的面积为多少? 思路:开始就认为是一个凸包的问 ...
- Codeforce 220 div2
D 插入: 在当前指针位置sz处插入一个1,col[sz]记录插入的内容,sz++; 删除i: 找到第i个1的位置,赋为0; 于是转化为一个维护区间和的问题; trick: 如果是依次删除a[0],a ...
- Codeforce 217 div2
C 假设每种颜色的个数都相同,可以用轮换的方式,让答案达到最大n,当不同的时候,可以每次从每种颜色中取出相同个数的手套来操作; 一直迭代下去直到只剩下1种颜色; 再将这一种颜色与之前交换过的交换就行了 ...
- Codeforce 216 div2
D 只要搞清楚一个性质:确定了当前最大和次大的位置,局面就唯一确定了; 根据这个性质设计dp,统计到达该局面的方法数即可. E 询问的要求是: 求有多少个区间至少覆盖了询问的点集中的一个; 转化成逆命 ...
- codeforce 459 DIV2 D题
题意 在一个DAG上面有N个点M条边,每一条边上都有一个小写字母.两个人Max and Lucas 每个人一颗棋子,两个人轮流行棋,当前这一步选择的路上面的字母必须大于等于上一步路上面的字母,当轮 ...
- codeforce 382 div2 E —— 树状dp
题意:给一棵n个结点的无根树染色,求使每个结点距离为k的范围内至少有一个被染色的结点的总染色方法数目 分析:首先我们定义: 对于结点v, 如果存在一个黑色结点u距离v不超过k,则结点v被“控制” 首先 ...
随机推荐
- Hive 7、Hive 的内表、外表、分区(22)
Hive 7.Hive 的内表.外表.分区 1.Hive的内表 Hive 的内表,就是正常创建的表,在 http://www.cnblogs.com/raphael5200/p/5208437.h ...
- s16_day01
一.基础 1.编码 ascii-->GB2312-->GB18030-->GBK-->unicode-->UTF8可变长 2.数据类型 int,long,float,co ...
- iOS UIView指定显示摸一个角弧形显示
关键代码: UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect: view.bounds byRoundingCorner ...
- iOS 压缩与裁剪图片问题
我们假设要在截图中的举行图片展示区显示图片,由于原图片的宽高比例与图片显示窗口的宽高比例不一定相同,所以,直接将图片扔进去会改变图片的宽高比例,展示效果不好. 这时你可能想到设置UIImageView ...
- 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义
干web当然,需要做的事情时,项目管理登录身份验证及其他权利.假设我们必须使用相应的登陆,未经允许是不可能的. 因此,我们需要使用拦截器,拦截功能struts2它集成.当然,有可能在Spring正在使 ...
- Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同
本系列作为Effective JavaScript的读书笔记. prototype,getPropertyOf和__proto__是三个用来訪问prototype的方法.它们的命名方式非常类似因此非常 ...
- MODULE_DEVICE_TABLE
1. MODULE_DEVICE_TABLE (usb, skel_table);该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数.内核构建时,depmod ...
- HTML与CSS入门——第四章 理解层叠样式表
知识点: 1.创建基本样式表的方法 2.使用样式类的方法 3.使用样式ID的方法 4.构建内部样式表和嵌入样式的方法 4.1 CSS工作原理: CSS:层叠样式表的缩写,是一种定义样式结构如字体.颜色 ...
- MVC文件上传 - 使用Request.Files上传多个文件
控制器 1: using System; 2: using System.Collections.Generic; 3: using System.IO; 4: using System.Linq; ...
- Oracle 如何让别人能够连接到你的数据库
Oracle 初步 --Oracle的一些关键字 i和g只是版本的代号,指oracle运用的技术i代表Internet就是互联网技术g代表grid就是网格技术现在出的最新版是c就是cloud也就是云技 ...