2017-07-12:分块(SOJ1939)+中位数(SOJ1938)
来源:互联网 发布:sql server 2008 免费 编辑:程序博客网 时间:2024/04/30 21:32
2017-07-11考试第三题:一道不断加数,删数,查数的题
1.在集合中加入数字 s ;
2.在集合中删除数字 s ,保证 s 存在,如果有多个 s,只删除一个即可;
3.查询满足 a&s=a 条件的 a 的个数;
第一眼以为是线段树,但实际上并不是。
思想是分块处理:
由于数据大小是2^16,于是分为2^8*2^8,把一个数分为前八位和后八位
pre=x>>8; suf=x%256;
pre用来找集合,suf用来枚举集合中的数
注意:
用pre来找集合的时候,是要把pre丢进集合中,要用pre来进行比较
用suf在集合中枚举数的时候,是寻找集合中的数,要用集合中的数进行比较
丢数时要把满足pre的所有集合里面丢进数,找数时只枚举pre集合中的数
add: for (int i=0;i<=255;i++) if ((pre&i)==pre) a[i][suf]++; del: for (int i=0;i<=255;i++) if ((pre&i)==pre) a[i][suf]--; cnt: for (int i=0;i<=255;i++) if ((sur&i)==i) ans+=a[pre][i];
2017-07-12考试第二题:求以i为中位数的最长数列长度
思想:以待求数为节点,分别向前向后枚举,用cnt计数,注意下标为第二关键字
l[i]:在待求点左侧状态为i的最长距离 r[i]:在待求点右侧状态为i的最长距离
for (int i=1;i<=n;i++){ cnt=0; memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); l[n]=i; r[n]=i; for (int j=i-1;j>=1;j--){ if (a[i]>=a[j]) cnt--; else cnt++; l[n+cnt]=j; } cnt=0; for (int j=i+1;j<=n;j++){ if (a[i]<=a[j]) cnt++; else cnt--; r[n+cnt]=j; } b[i]=1; for (int j=-n;j<=n;j++) if (r[n-j] && l[n+j]) b[i]=max(b[i],r[n-j]-l[n+j]+1); }
阅读全文
0 0
- 2017-07-12:分块(SOJ1939)+中位数(SOJ1938)
- 20161024的考试】noip模拟,dp,区间中位数,值域分块
- median of medians(中位数的中位数)
- BZOJ 1303-中位数图(中位数技巧)
- BFPRT(中位数的中位数)算法
- 【枚举】中位数(median)
- POJ 2388(中位数)
- 中位数(Median)
- 中位数问题(/C++)
- (1.4.6.2)中位数
- hdu2083(中位数)
- 中位数(C语言)
- 中位数
- 中位数
- 中位数
- 中位数
- 中位数
- 中位数
- 深圳拉米拉手机云控营销系统有哪些功能
- 9 Three.js使用性能插件stats进行性能监听
- 读写分离——读写锁ReadWriteLock
- 【JAVA300】0-5 笔记
- SpringMVC+Maven快速入门
- 2017-07-12:分块(SOJ1939)+中位数(SOJ1938)
- DOMContentLoaded与load事件
- poj 1611(并查集)(B)
- 剑指Offer算法题之设计模式的单例模式--面试题2:实现Singleton模式
- 解决Git错误提示:fatal: remote origin already exists.及Git常见错误处理!
- JavaScript浏览器对象
- 使用Aspose.Cell控件实现多个Excel文件的合并
- USACO-Section2.1 Healthy Holsteins【宽度优先搜索/深度优先搜索】
- 用js动态控制一个控件的style样式