Task1

蛤布斯有一个序列,初始为空。它依次将 1-n 插入序列,其中 i 插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边)。它希望你帮 它求出最终序列。

对于 100%的数据,n<=1000000,0<=ai<i。

倒着做,寻找第ai+1个空位插入即可,用线段树维护,注意卡常

O(nlogn)

 #include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#include<vector>
#define re register
#define il inline
using namespace std;
const int N=;
int n,a[N],c[N],m=,ans[N],tot=;
char t[];
il int read(){
re int hs=;re char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)){
hs=(hs<<)+(hs<<)+c-'';
c=getchar();
}
return hs;
}
il void print(re int h){
tot=;
while(h>){
t[++tot]=h%+'';
h/=;
}
for(re int i=tot;i>;--i)
putchar(t[i]);
putchar(' ');
}
int main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
n=read();
while(m<n+) m<<=;
for(int i=;i<=n;++i) a[i]=read(),c[i+m]=;
for(int i=m-;i>;--i) c[i]=c[i+i]+c[i+i+];
for(re int i=n,j,k;i>=;--i){
k=a[i]+;
for(re int p=;;){
if(c[p+p]>=k){
p<<=;
}
else{
k-=c[p+p];
p<<=;++p;
}
if(p>m){
j=p-m;break;
}
}
ans[j]=i;
for(c[j+=m]=,j>>=;j;j>>=)
c[j]=c[j<<]+c[(j<<)+];
}
for(int i=;i<=n;i++)
print(ans[i]);
return ;
}

Task2

蛤布斯有 n 个物品和一个大小为 m的背包,每个物品有大小和价 值,它希望你帮它求出背包里最多能放下多少价值的物品。

对于 100%的数据,n<=40,0<=m<=10^18,0<=xi,wi<=10^15。

折半枚举,二分查找

O(2^n*n)

 #include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#define il inline
#define re register
using namespace std;
typedef long long ll;
const int N=;
int n,s,t,l,r,mid;
ll W,w[],v[],x,y,tot,ans;
struct data{ll p,q;} a[N],b[N];
il bool cmp(re data a,re data b){
return (a.p!=b.p)?(a.p<b.p):(a.q>b.q);
}
int main(){
freopen("pack.in","r",stdin);
freopen("pack.out","w",stdout);
scanf("%d%I64d",&n,&W);
for(int i=;i<=n;i++)
scanf("%I64d%I64d",&w[i],&v[i]);
s=n/;t=n-s;
for(re int S=(<<s)-;S>;--S){
x=y=;
for(re int i=;i<s;++i)
if(S&(<<i)){
x+=w[i+];
y+=v[i+];
}
a[S].p=x;a[S].q=y;
}
sort(a+,a+(<<s),cmp);
for(re int i=;i<(<<s);++i){
if(a[i].p>W) break;
if(a[i].q>b[tot].q) b[++tot]=a[i];
}
b[].p=b[].q=;
for(re int S=(<<t)-;S>;--S){
x=y=;
for(re int i=;i<t;++i)
if(S&(<<i)){
x+=w[i++s];
y+=v[i++s];
}
if(x>W) continue;
l=;r=tot;
while(l<r){
mid=(l+r+)/;
if(b[mid].p<=W-x) l=mid;
else r=mid-;
}
ans=max(ans,y+b[l].q);
}
cout<<ans;
return ;
}

Task3

对于 100%的数据,n<=5000,m<=100000

显然如果一条线段树上的线段如果和一个查询有重叠,那么就会被这个查询访问一次。

容易得到暴力动规方程令f[i][j]表示选取区间[i,j]作为线段树上一节点的答案,g[i][j]为[i,j]与多少个查询重叠

f[i][j]=min(f[i][k]+f[k][j]+g[i][j])

显然这满足四边形不等式优化。

时间复杂度O(n^2)

常州day7的更多相关文章

  1. [日常训练]常州集训day7

    T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...

  2. 常州培训 day7 解题报告

    最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元  n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...

  3. 【2016常州一中夏令营Day7】

    序列(sequence)[题目描述]蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮它求出最终序列.[输入数据 ...

  4. day7

    本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  5. Python之路,Day7 - Python基础7 面向对象

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  6. Python Day7

    概述 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法 ...

  7. Python之路,Day7 - 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 经典类vs新式类 把下面代 ...

  8. 冲刺阶段day7

    day7 项目进展 又是一个周三,有轮到我写东西了.首先我们对昨天的成果调试了几遍,改了几个小Bug之后就没有什么问题了,完善了登录界面的代码,学生管理这部分终于被敲定下来,并且正式完工了.然后还生下 ...

  9. python学习之路-day7

    本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法                             ...

随机推荐

  1. Appium+python HTML测试报告(1)(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10054632.html) 测试任务执行完成后,我们需要一份通俗易懂的测试报告来展示自动化测试的结果. HTMLTes ...

  2. Linux☞权限数字表示法

    权限数字表示法: 1.Linux有三种访问权限: a.可读:r(Read) b.可写:w(Write) c.可执行:x(eXcute) 2.简单说说如何去看该文件的访问权限呢?一般我们执行命令,查看目 ...

  3. SQL Server变量杂谈

    学习SQL的过程有进步的话还是一件很美妙的事情的 在第一家公司虽然只呆了两年,但是感觉是我进步最快的两年.那时候工作和生活都挺充实的,每天都有一点点的收获和付出,其中最大的收获莫过于掌握一些核心技能. ...

  4. 不相交集合ADT -数据结构(C语言实现)

    读数据结构与算法分析 不相交集合 等价关系 满足三个性质 - 自反性 - 对称性 - 传递性 基本数据结构 基本思路 使用一个数组,下标表示该集合,内容表示指向的父亲 实现 类型声明 typedef ...

  5. JAVA学习笔记--正则表达式

    正则表达式是一种强大而灵活的文本处理工具.使用正则表达式,可以让我们以编程的方式构造复杂的文本,并对输入的字符串进行搜索. 一.基础正则表达式语法(表格来自J2SE6_API) 字符 x 字符 x \ ...

  6. leetcode个人题解——#36 valid Sudoku

    思路题目里已经给出来了,判断是否是一个有效数独,只需满足以下三个条件: 1.同行元素不重复且1-9都有: 2.同列元素不重复且1-9都有: 3.每个粗线分隔的3*3的小九宫格元素不重复且1-9都有. ...

  7. asp.net mvc 使用Ajax调用Action 返回数据【转】

      使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src=& ...

  8. 武汉天喻信息 移动安全领域 SE(Secure Element)

    产品简介: SE(Secure Element)为安全模块,是一台微型计算机,通过安全芯片和芯片操作系统(COS)实现数据安全存储.加解密运算等功能.SE可封装成各种形式,常见的有智能卡和嵌入式安全模 ...

  9. 作业 20181030-3互评Alpha版本

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2323 组名:可以低头,但没必要 组长:付佳 组员:张俊余  李文涛  孙 ...

  10. lintcode-389-判断数独是否合法

    389-判断数独是否合法 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说 ...