博客界面的小人搞不好导致无心写博客

题意:tyd非常喜欢玩雪,下雪下了n天,第i天她会堆一堆大小为Vi的雪堆,但因为天气原因,每堆雪会融化Ti,问每天总共融化了多少雪;

直接上代码+注释

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<math.h>
5 #include<iostream>
6 #define ll long long
7 using namespace std;
8
9 ll a[100100],b[100100],c[1010000],sum[100100],d[100100],e[101000];
10
11 int ef(int mid,int i)
12 {
13 if(a[i]>c[mid]-c[i-1]) return 1;
14 return 0;
15 }
16
17 int main()
18 {
19 int n;
20 scanf("%d",&n);
21 for(int i=0;i<n;i++)
22 scanf("%lld",&a[i]);
23 for(int i=0;i<n;i++){
24 scanf("%lld",&b[i]);
25 c[0]=b[0];
26 if(i) c[i]=c[i-1]+b[i];
27 }
28 for(int i=0;i<n;i++){
29 ll l=i,r=n;
30 while(l<r){
31 int mid=l+r>>1;
32 if(ef(mid,i)) l=mid+1; ///二分找到可以完全融化b[i]的最后一堆;
33 else r=mid;
34 }
35 d[i]++;d[l]--; ///他可以坚持的最后那一堆--; 第1堆++;
36 sum[l]+=(a[i]-c[l-1]+c[i-1]); ///把多(少)的那部分(最后一堆)存在一个数组里
37 } ///如果是少的话就是负数加进去
38 for(int i=0;i<n;i++)
39 e[i]=e[i-1]+d[i]; ///统计每次有多少堆(多的或少的都在sum数组里),每次++只是最开始那堆 所以加起来 多加的部分在l堆就--了;
40 for(int i=0;i<n;i++)
41 printf("%lld ",e[i]*b[i]+sum[i]); ///堆数*每次融化量+多(少)的那部分
42 printf("\n");
43 return 0;
44 }

最新文章

  1. Hitachi Content Platform学习
  2. Issue 7: 网络in action
  3. HDU 1015 Safecracker
  4. jquery层居中,点击小图查看大图,弹出层居中代码
  5. [POJ3694]Network(LCA, 割边, 桥)
  6. Umbraco Forms 中的Recaptcha遇到的问题
  7. 《Effect Java》学习笔记1———创建和销毁对象
  8. python【第二十篇】Django表的多对多、Ajax
  9. codevs 4768 跳石头
  10. Thrift入门初探--thrift安装及java入门实例
  11. MIUI目前为止最简单安装谷歌服务框架教程
  12. 软件151 王楚博 maven的导入
  13. [转]mysql优化——show processlist命令详解
  14. restful 规范(建议)
  15. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能
  16. SmartSVN has inconsistent newlines解决方法
  17. PAT乙级1006
  18. Opencv2.4.9安装和在visualstudio 2013中配置
  19. jQuery 最简化实现
  20. Kotlin Reference (四) Basic Types

热门文章

  1. CAN总线采样点测试
  2. linux最大打开文件句柄数
  3. 【Oracle】生成随机数
  4. 你不知道的Linux目录
  5. 以事实驳斥:改进你的c#代码的5个技巧(四)
  6. kubernets之statefulset资源
  7. Py-时间,随机,os,sys,jsonpickle序列化,shelve,xml模块
  8. OpenDaylight — YANG
  9. Cisco之show基础命令
  10. ESXI6.7主机降级至ESXI6.5