2017.10.28 QB模拟赛 —— 下午
T1
按x值排序
遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他
splay multiset
cys大佬说 multiset就是不去重的set,
#include <algorithm>
#include <cstdio>
#define N 100005
using namespace std;
struct node
{
int x,y,opt;
bool operator<(node a)const
{
if(opt!=a.opt&&x==a.x) return opt>a.opt;
else return x<a.x;
}
}card[N<<];
];
inline void pushup(int rt)
{
],r=ch[rt][];
siz[rt]=siz[l]+siz[r]+cnt[rt];
}
inline void ins(int &rt,int x)
{
if(!rt)
{
rt=++cn;
data[cn]=x;
siz[cn]=cnt[cn]=;
return;
}
if(data[rt]==x)
{
cnt[rt]++;
siz[rt]++;
return;
}
if(x<data[rt])
{
ins(ch[rt][],x);
fa[ch[rt][]]=rt;
pushup(rt);
}
else
{
ins(ch[rt][],x);
fa[ch[rt][]]=rt;
pushup(rt);
}
}
int ask_pre(int rt,int x)
{
int p=rt,ret=0x7fffffff;
while(p)
{
];
else
{
ret=data[p];
p=ch[p][];
}
}
return ret;
}
inline ]==x;}
void rotate(int x)
{
int y=fa[x],z=fa[y],b=son(x),c=son(y),a=ch[x][!b];
if(z) ch[z][c]=x;
else root=x;
fa[x]=z;
if(a) fa[a]=y;
ch[x][!b]=y;ch[y][b]=a;
fa[y]=x;
pushup(y);pushup(x);
}
void splay(int x,int i)
{
while(fa[x]!=i)
{
int y=fa[x],z=fa[y];
if(z==i) rotate(x);
else
{
if(son(y)==son(x)) rotate(y),rotate(x);
else rotate(x),rotate(x);
}
}
}
int getmn(int rt)
{
,p=rt;
while(p)
{
ret=p;
p=ch[p][];
}
return ret;
}
void del(int rt,int x)
{
if(data[rt]==x)
{
)
{
cnt[rt]--;
siz[rt]--;
}
else
{
splay(rt,);
]);
)
{
splay(p,rt);
root=p;fa[p]=;
ch[p][]=ch[rt][];
fa[ch[rt][]]=p;
}
else
{
root=ch[rt][];
fa[ch[rt][]]=;
}
}
return;
}
if(x<data[rt])
{
del(ch[rt][],x);
pushup(rt);
}
else
{
del(ch[rt][],x);
pushup(rt);
}
}
int main(int argc,char *argv[])
{
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
scanf("%d",&n);
;i<=n;++i) scanf(;
;i<=n<<;++i) scanf(;
sort(card+,card++n*);
;i<=n<<;++i)
{
) ins(root,card[i].y);
else
{
if(!cn) continue;
int v=ask_pre(root,card[i].y);
if(v==0x7fffffff) continue;
ans++;
del(root,v);
}
}
printf("%d\n",ans);
fclose(stdin); fclose(stdout);
;
}
splay
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
int n;
multiset <int> s;
],b[];
int cmp(node i,node j) {return i.x<j.x;}
int main()
{
freopen("water.in","r",stdin);
freopen("water.out","w",stdout);
int T;
T=;
while(T--)
{
scanf("%d",&n);
;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
;i<n;i++) scanf("%d%d",&b[i].x,&b[i].y);
sort(a,a+n,cmp);
sort(b,b+n,cmp);
s.clear();
,ans=;
;i<n;i++)
{
while(a[i].x>=b[k].x&&k<n)
{
s.insert(b[k].y);
k++;
}
if(s.empty())continue;
multiset<int>::iterator it=s.upper_bound(a[i].y);
if (it==s.begin()) continue; it--;
ans++; s.erase(it);
}
printf("%d\n",ans);
}
;
}
multiset
T2
最少需要 log(n)/log(2) 个
dp[j][k] 表示 金币和是 j 最大金币是k 的方案总数
枚举下一枚金币是什么
#include <cstdio>
#include <cmath>
#define N 1005
inline int min(int a,int b) {return a>b?b:a;}
int n,s,ans,f[N][N],dp[N][N];
int main(int argc,char *argv[])
{
freopen("dream.in","r",stdin);
freopen("dream.out","w",stdout);
scanf("%d",&n);
s=log2(n)+;
f[][]=;
;i<s;++i)
{
;j<=n;++j)
;k<=n;++k)
if(f[j][k])
;l<=j+;++l)
dp[min(n,j+l)][l]+=f[j][k];
;j<=n;++j)
;k<=n;++k)
f[j][k]=dp[j][k],dp[j][k]=;
}
;i<=n;++i) ans+=f[n][i];
printf("%d %d\n",s,ans);
fclose(stdin);
fclose(stdout);
;
}
T3
dp[i][j] 表示 1~i 切了j刀的最优解
dp[i][j]=min{dp[k][j-1]+sum(k+1,i)}
从大到小 枚举k 更新sum
复杂度 20*N^2
固定j,随着i的增大,k不会减少
1d1d动态规划优化
20*n^2的简单dp -> 在固定j的情况下 随着i的增大,k不降 -> 分治求dp值
#include <cstdio>
#define N 100005
typedef long long LL;
int n,k,L,R,a[N],s[N];
LL sum,f[N],g[N];
void update(int x,int type)
{
) sum+=s[a[x]],++s[a[x]];
else --s[a[x]],sum-=s[a[x]];
}
void move(int l,int r)
{
);
);
);
);
}
void work(int l,int r,int fl,int fr)
{
if(fl>fr) return;
,mi;
LL mx=1LL<<;
for(int i=l;i<mid&&i<=r;++i)
{
move(i+,mid);
if(mx>f[i]+sum) mx=f[i]+sum,mi=i;
}
g[mid]=mx;
work(l,mi,fl,mid-);
work(mi,r,mid+,fr);
}
int main(int argc,char *argv[])
{
freopen("dp.in","r",stdin);
freopen("dp.out","w",stdout);
scanf("%d%d",&n,&k);
;i<=n;++i) scanf("%d",&a[i]);
f[]=;
;i<=n;++i) f[i]=1LL<<;
while(k--)
{
L=,R=,sum=;
;i<=n;++i) s[i]=;
work(,n-,,n);
;i<=n;++i) f[i]=g[i],g[i]=;
}
printf("%I64d\n",f[n]);
fclose(stdin); fclose(stdout);
;
}
2017.10.28 QB模拟赛 —— 下午的更多相关文章
- 2017.10.28 QB模拟赛 —— 上午
题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set 死慢.. #include <cstdio> int t; long long p; int ma ...
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 2017.10.7 QBXT 模拟赛
题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...
- 2017.10.3 QBXT 模拟赛
题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...
- 2017.10.6 QBXT 模拟赛
题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...
- 2017.10.5 QBXT 模拟赛
题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...
- 2017.10.4 QBXT 模拟赛
题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...
- 2017.10.2 QBXT 模拟赛
题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...
- 2017.10.1 QBXT 模拟赛
题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...
随机推荐
- Mysql 在DOS窗口下的操作
1.登录 (1)首先cd 进入mysql对应的安装目录 (2)再输入mysql -u root -p 2.重启 https://blog.csdn.net/u012385190/article/det ...
- Spring 配置RMI远程调用
项目中遇到了跨系统调用,当初想的是用webservice或者是hessian.但是这个接口用到的并不多,而且是一个非常简单的方法.所有便想到了RMI.在spring中 实现RMI非常简单. 暴露服务: ...
- P3166 [CQOI2014]数三角形
传送门 直接求还要考虑各种不合法情况,不好计数 很容易想到容斥 把所有可能减去不合法的情况剩下的就是合法情况 那么我们只要任取不同的三点就是所有可能,不合法情况就是三点共线 对于两点 $(x_1,y_ ...
- MATLAB教程
基本操作:https://www.w3cschool.cn/matlab/ MATLAB2018a下载安装教程http://www.zhanshaoyi.com/6938.html
- js Form表单转json格式,及后台接收(多种方法)
转载:https://blog.csdn.net/qq_40138785/article/details/81533015 一.serialize()方法格式:var data = $("# ...
- c#之GDI简单实现代码及其实例
作业:文档形式 3到5页理解 1.理解 2.源代码解释(1到2页) 3.实现效果 项目地址: https://github.com/zhiyishou/polyer Demo:https://zhiy ...
- C# 利用ADO.NET导出大批量数据
2015年12月,XX项目中需要做一个数据导出功能,当时所有页面的到处功能均已经实现,但有个页面数据量太大,导出过程中导出页面直接卡死.不得已我准备选用ADO.NET来重新完成这个功能,因为考虑到越偏 ...
- js、jquery的入口函数
js的入口函数写法: window.onload = function() { }; 如果文件中有多个window.onload入口函数,则只会执行最后一个,之前的入口函数没有用. jquery的入口 ...
- 转换Excel格式
做一个功能需要将excel2003格式转成2007的格式,代码如下 需要引用office的microsoft.office.interop.excel.dll var app = new Micros ...
- OpenStack Weekly Rank 2015.08.24
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 5 1 1 6 13 Sw ...