ACM-10月15日周日周末训练心得
来源:互联网 发布:健身行业数据 编辑:程序博客网 时间:2024/06/05 03:59
又到了一周的周末,这周开始活动不是那么多了,也稳定下来了,花了更多的时间去学习,我们小组约了好几次去acm室一块做题目讨论,这些时间完完全全的投进在ACM的感觉还不赖,今天几乎就是一天坐在电脑前看题目了,今天做梳妆数组的时候看了关于树状数组单点更新并且能删除元素的处理,对于HDU3874这道题,要做一个预处理需要一个树状数组A[n],从左到右读入所有的a[i],如果当前a[i]=x值是第一次出现,就执行add(i,x),否则不执行。当扫描完了n个值后,保证sum(R)就是区间[1,R]的答案。然后对所有查询的区间进行排序,使得[L,R]区间中L小的区间排在前面。我们首先用sum(R)给出所有区间[1,R]的查询。接着计算所有区间[2,R]的查询,但是做这步前,还需要消除a[1]对后面序列的影响,使得我们这个序列就好像是本来就是从a[1]开始的,从来没有存在过a[1]。这就是离线话处理,要完成这个要求,只需要执行add(1,-a[1])并且需要找到a[1]值第二次出现的位置y执行add(y,a[1])。做完上面这步,就保证了当前的sum(R)就是区间[2,R]的答案(有关区间[3,R],[4,R]等的查询。
所以每当查询完了区间[i-1,R]的答案后就要找到a[i-1]的值出现的下一个位置y(如果不存在为-1时,就默认为n+1位置),执行add(i-1,-a[i-1]) 和 add(y,a[i-1])即可。可以用next[i]=j来表示与a[i]值相同的下一个值出现在j位置。用hash[h]=i表示值为h的a[i]第一次出现的位置是i。
所以每当查询完了区间[i-1,R]的答案后就要找到a[i-1]的值出现的下一个位置y(如果不存在为-1时,就默认为n+1位置),执行add(i-1,-a[i-1]) 和 add(y,a[i-1])即可。可以用next[i]=j来表示与a[i]值相同的下一个值出现在j位置。用hash[h]=i表示值为h的a[i]第一次出现的位置是i。
阅读全文
0 0
- ACM-10月15日周日周末训练心得
- ACM-10月1日周日周末训练心得
- ACM-12月10日周日周末训练心得
- ACM-9月3日周日周末训练心得
- ACM-9月17日周日周末训练心得
- ACM-9月24日周日周末训练心得
- ACM-11月5日周日周末训练心得
- ACM-11月12日周日周末训练心得
- ACM-11月19日周日周末训练心得
- ACM-11月26日周日周末训练心得
- ACM-12月3日周日周末训练心得
- ACM-10月8日周日周末训练日记
- ACM10月29日周日周末训练心得
- ACM-9月10日周末训练心得
- ACM训练周末总结—10月15日
- 10月15日周日训练笔记
- ACM训练周末总结—10月8日
- ACM训练周末总结—10月29日
- hdu5950(递推+矩阵快速幂函) 2016亚洲区域赛沈阳站C题(铜牌题)
- HDU1757(矩阵快速幂+简单的矩阵构造)
- Authentication for Hadoop HTTP web-consoles ---Hadoop 1.2.1
- okHttp封装
- hadoop入门六(基础知识入门)
- ACM-10月15日周日周末训练心得
- java根据经纬度获取该经纬度的省市区
- SQL语句范例之表、空间、特权和dump
- 批处理命令Start的使用介绍
- 分析Android 搜狗输入法在微信和QQ中发送图片和表情
- 先序遍历用于优化树形分组背包问题
- 微信应用开发总结
- 验证表单
- 数组去重