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] ...
随机推荐
- poj1125传播谣言(弗洛伊德,求最长路)
Stockbroker Grapevine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38541 Accepted: ...
- Linux磁盘分区管理
1.分区步骤 fdisk -l 查看系统中的磁盘 fdisk /dev/vdb ...
- Go语言基础之9--指针类型详解
一. 变量和内存地址 每个变量都有内存地址,可以说通过变量来操作对应大小的内存 注意:通过&符号可以获取变量的内存地址 通过下面例子来理解下: 实例1-1 package main impor ...
- beleline hive spark-shell帮助
-- beeline帮助 : jdbc:hive2://100.69.216.40:10001> !help !addlocaldriverjar Add driver jar file in ...
- docker基本命令日志
docker run - Run a command in a new container 启动一个新的容器,一般在docker pull之后首次运行此image -i 保持stdout打开 -t 打 ...
- thinkphp自动验证和自动完成
tp验证码的自动验证小案例 模板文件 <form action="" method="post"> <p> User: <inpu ...
- java——数据结构
底层数据结构: 数组 ArrayList 链表 LinkedList 应用数据结构: 二分搜索树 BST 最大堆/最小堆 MaxHeap/MinHeap 线段树 SegmentTree 字典树 Tri ...
- REQUIRED与REQUIRED_NEW
出处: https://blog.csdn.net/selfsojourner/article/details/74561745 spring 事务的传播行为中,有两个容易混淆的行为:REQUIRED ...
- 移动测试之appium+python 简单例子(五)
# coding=utf-8 from appium import webdriver import time import unittest import os import HTMLTestRun ...
- Unity脚本的生命周期 同一脚本/不同脚本/游戏对象激没激活/脚本激没激活,几种情况下的Awake,OnEnable,Start的执行顺序
可以自己在Unity里面试一下 游戏对象在Hierarchy面板不是激活的,它的脚本没作用,脚本中的函数不会执行; 游戏对象在Hierarchy面板是激活的,脚本没激活,Awake会执行,OnEnab ...