#13【BZOJ2794】[Poi2012]Cloakroom

题解:

感觉真是很智障。。连这么简单的题都没想出来

一直在想这么做动态背包。。发现不会

首先显然我们将询问按照m 序列按照a[i]排序

然后怎么满足b呢

其实很简单啊。。只需要记录f[i]表示前面这些物品达到i体积时最小值最大是多少

原文地址:https://www.cnblogs.com/yinwuxiao/p/8972241.html

时间: 2024-10-22 14:41:38

#13【BZOJ2794】[Poi2012]Cloakroom的相关文章

【BZOJ2789】[Poi2012]Letters 树状数组

[BZOJ2789][Poi2012]Letters Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. Input 第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度. 第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母. Output 一个非负整数,表示最少的交换次数. Sample Input 3 ABC BCA Samp

【BZOJ2795】[Poi2012]A Horrible Poem hash

[BZOJ2795][Poi2012]A Horrible Poem Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. Input 第一行一个正整数n (n<=500,000),表示S的长度.第二行n个小写英文字母,表示字符串S.第三行一个正整数q (q<=2,000,000),表示询问个数.下面q行每行两个正整数a,b (1<=a<=b<=n),表示询

【BZOJ2803】[Poi2012]Prefixuffix 结论题

[BZOJ2803][Poi2012]Prefixuffix Description 对于两个串S1.S2,如果能够将S1的一个后缀移动到开头后变成S2,就称S1和S2循环相同.例如串ababba和串abbaab是循环相同的.给出一个长度为n的串S,求满足下面条件的最大的L:1. L<=n/22. S的L前缀和S的L后缀是循环相同的. Input 第一行一个正整数n (n<=1,000,000).第二行n个小写英文字母,表示串S. Output 一个整数,表示最大的L. Sample Inpu

&lt;13&gt;【了解】计算机中的进制+【理解】原码反码补码基本概念+【理解】为什么要引入反码、补码?+【掌握】位运算符介绍及使用+位运算应用:编程实现10进制转2进制

1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5 //定义10进制数,打印出10.8.16进制的值 6 int a = 13; 7 printf("%d\n",a); 8 printf("%o\n",a); 9 printf("%x\n",a); 10 11 //int 64 4个字节 12 int b = 0b0000000000000000

【BZOJ2793】【数学】[Poi2012]Vouchers

Description 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个. 正整数中有m个数被标成了幸运数,问有哪些人取到了幸运数. Input 第一行一个正整数m (m<=1,000,000),下面m行每行一个正整数x (x<=1,000,000),表示x是一个幸运数. 接下来一行一个正整数n (n<=1,000,000),下面n行每行一个正整数x (x<=1,000,000),表示这一组来了x个人. Output

【bzoj3060】[Poi2012]Tour de Byteotia 并查集

题目描述 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. 输入 第一行三个整数n,m,k: 接下来m行每行两个整数ai,bi,表示ai和bi之间有一条无向边. 输出 一个整数,表示最少的删边数量. 样例输入 11 13 5 1 2 1 3 1 5 3 5 2 8 4 11 7 11 6 10 6 9 2 3 8 9 5 9 9 10 样例输出 3 题解 并查集 先把不包含编号小于等于k的点的边连上,用并查集维护图的连通性.易知如果删除这些边则一定不是最优解,

【bzoj2796】 [Poi2012]Fibonacci Representation

给出一个数字,用FIB数列各项加加减减来得到. 问最少要多少个(可以重复使用) 大概试了一下,fibonacci数列的增长是很快的,大概到了90+项就超过了题目范围-- 所以每次找一个最近的fibonacci数试一下就好,实测跑得飞快. 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll f[100],n,m; 5 inline ll read(){ 6 ll f=1,x=0;char ch

【bzoj2795】[Poi2012]A Horrible Poem Hash+分解质因数

题目描述 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. 输入 第一行一个正整数n (n<=500,000),表示S的长度.第二行n个小写英文字母,表示字符串S.第三行一个正整数q (q<=2,000,000),表示询问个数.下面q行每行两个正整数a,b (1<=a<=b<=n),表示询问字符串S[a..b]的最短循环节长度. 输出 依次输出q行正整数,第i行的正整数对应第i

【bzoj2789】[Poi2012]Letters 树状数组求逆序对

题目描述 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. 输入 第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度. 第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母. 输出 一个非负整数,表示最少的交换次数. 样例输入 3 ABC BCA 样例输出 2 题解 树状数组求逆序对 一个结论:将序列A通过交换相邻元素变换为序列B,需要的最小次数为A中