题目传送门:http://ifrog.cc/acm/problem/1112

神奇的倍增二分,长见识了,在此做个记录,分享给大家。

懒得写题解了,直接转YJQ的:http://ifrog.cc/acm/solution/18

另外,这个复杂度的证明我不是很懂,只会自己瞎脑补的不严谨的证明,如果哪位神犇会,还请教教我qwq。

代码:

 #include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
typedef long long ll;
const int MAXN = ; int n;
ll m, a[MAXN], v[MAXN];
int ans[MAXN] = {}; ll tmp[MAXN];
bool check( int begin, int end ) { // 区间混乱度大于m返回true
for( int i = begin; i < end; ++i ) tmp[i] = a[i];
sort(tmp+begin, tmp+end);
ll sum = ;
for( int i = begin; i < end; ++i )
sum += tmp[i] * v[i-begin];
return sum > m;
} int main() {
scanf( "%d%lld", &n, &m );
for( int i = ; i < n; ++i ) scanf( "%lld", a+i );
for( int i = ; i < n; ++i ) scanf( "%lld", v+i );
for( int i = ; i < n; ) {
int k;
for( k = ; i+k <= n; k <<= ) // 倍增,左闭右开区间
if( check(i,i+k) ) break;
k = min(k, n-i);
int low = i+(k>>), high = i+k;
while( low < high ) { // 二分
int mid = (low+high)>>;
if( check(i,mid) ) high = mid;
else low = mid+;
}
if( check(i,low) ) ans[low-] = ;
i = low;
// printf( "low = %d\n", low );
}
for( int i = ; i < n; ++i ) {
if(i) ans[i] += ans[i-], putchar(' ');
printf( "%d", ans[i] );
}
puts("");
return ;
}

【题解】我也不是B ifrog 1112 二分 倍增的更多相关文章

  1. “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】

    A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...

  2. 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)

    Problem A: An easy problem Description Peter Manson owned a small house in an obscure street. It was ...

  3. 题解报告:poj 3061 Subsequence(前缀+二分or尺取法)

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  4. Codeforces Round#402(Div.1)掉分记+题解

    哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...

  5. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解

    全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...

  6. [LightOJ1008]Fibsieve`s Fantabulous Birthday 题解

    前言 扫了一眼网上的题解,都是找规律. 估计就我一个蒟蒻在打二分. 题解 设一个" ┐"形为一层. 我们二分查找该数在那一层,然后就可以直接计算它的位置了. 代码 #include ...

  7. 《串并行数据结构与算法(SML语言)实验》题解

    注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关. 第一题: 题意: 对n个数升序排序. 题解: 快排,不解释. 代码(省略了输入输出函数,下同): val n = getInt ...

  8. 题解-Happy New Year

    题解-Happy New Year Happy New Year 给定 \(n\),\(m\) 和 \(k\).有一个序列 \(a\{m\}\) 初始值为 \(0\).有 \(n\) 种操作,每种可以 ...

  9. Codeforces 刷水记录

    Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...

随机推荐

  1. String和StringBuffer以及StringBuilder的区别

    今天在读<java编程思想>的时间,在看到String和StringBuffer以及StringBuffer这三个类的时间,做一个随笔小结,为自己的面试做好准备! 一:String,Str ...

  2. stm32之SPI通信协议

    SPI (Serial Peripheral interface),顾名思义就是串行外围设备接口.SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为P ...

  3. 关于excle导数据的一些代码笔记

    package com.bonc.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu ...

  4. php多进程单例模式下的 MySQL及Redis连接错误修复

    前几天写了个php常驻脚本,主要逻辑如下 //跑完数据后休息60秒 $sleepTime = 60; $maxWorker = 10; while (true) { $htmlModel = new ...

  5. 八:The YARN Timeline Server

    一.Overview 介绍     yarn timeline server用于存储和检查应用程序过去和现在的信息(比如job history server).有两个功能: 1.Persisting ...

  6. 算法模板の数学&数论

    1.求逆元 int inv(int a) { ) ; return (MOD - MOD / a) * inv(MOD % a); } 2.线性筛法 bool isPrime[MAXN]; int l ...

  7. 小程序之web-view打开外部链接

    小程序之web-view - 传送门 web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面.个人类型与海外类型的小程序暂不支持使用. 一:小程序使用web-view打开链接的前 ...

  8. 算法与数据结构实验题 4.1 伊姐姐数字 game

    ★实验任务 伊姐姐热衷于各类数字游戏,24 点.2048.数独等轻轻松松毫无压力.一 日,可爱的小姐姐邀请伊姐姐一起玩一种简单的数字 game,游戏规则如下: 一开始桌上放着 n 张数字卡片,从左到右 ...

  9. LintCode-8.旋转字符串

    旋转字符串 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例 对于字符串 "abcdefg". offset=0 => "abcdefg&qu ...

  10. C# Winform防止闪频和再次运行

    其实想实现只允许运行一个实例很简单,就是从program的入口函数入手.有两种情况: 第一种,用户运行第二个的时候给一个提示: using System; using System.Collectio ...