常州day7
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的更多相关文章
- [日常训练]常州集训day7
T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 【2016常州一中夏令营Day7】
序列(sequence)[题目描述]蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮它求出最终序列.[输入数据 ...
- day7
本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- Python之路,Day7 - Python基础7 面向对象
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- Python Day7
概述 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法 ...
- Python之路,Day7 - 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 经典类vs新式类 把下面代 ...
- 冲刺阶段day7
day7 项目进展 又是一个周三,有轮到我写东西了.首先我们对昨天的成果调试了几遍,改了几个小Bug之后就没有什么问题了,完善了登录界面的代码,学生管理这部分终于被敲定下来,并且正式完工了.然后还生下 ...
- python学习之路-day7
本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 静态方法 ...
随机推荐
- 解决 mybatis 的覆盖问题 以及避免手写大量mapper的方法
只需要先实现覆盖不追加的方法: 然后再把所有需要改动mapper的方法抽离出来即可
- linux设置定时任务调用接口
1.设置目录 cd /var/spool/cron 2.编辑文件(当前登录用户,不一定是root) vim root 3.添加内容 0 0 * * * wget http://192.144.141. ...
- LumiSoft.Net 收发邮件
一:LumiSoft.Net简介 Lumisoft is a software development company specialised in mobile phones and tablets ...
- mongod 安装
mongod --logpath F:\mongo\db\logs\logs.log --logappend --dbpath F:\mongo\db\data --directoryperdb -- ...
- FTP如何通过Windows防火墙
将C:\Windows\SysWOW64\ftp.exe(64位系统)C:\Windows\system32\ftp.exe(32位系统)文件添加到防火墙的允许列表中即可. 注:“控制面板” -> ...
- shell 参数
转:http://hi.baidu.com/ipvsadm/item/489d9e16460195ddbe9042ee linux中shell变量$#,$@,$0,$1,$2的含义解释 linux中s ...
- Python range() 函数用法
函数语法 range(start, stop[, step]) 参数说明: start: 计数从 start 开始.默认是从 0 开始.例如range(5)等价于range(0, 5); stop: ...
- HDU-4055:Number String
链接:HDU-4055:Number String 题意:给你一个字符串s,s[i] = 'D'表示排列中a[i] > a[i+1],s[i] = 'I'表示排列中a[i] < a[i+1 ...
- windows下对python的pip更新到最新版本
1->打开windows的命令窗口. 2->进入到pip.exe所在的文件夹下,我安装的python在G:\python3.6文件夹下,pip.exe则在G:\python3.6\Scri ...
- HTML5+Bootstrap 学习笔记 3
HTML5 aria-* and role aria是指Accessible Rich Internet Application.role的作用是描述一个非标准的tag的实际作用,而aria-*的作用 ...