A - Japan  POJ 3067 
要两条路有交叉,(x1,y1)(x2,y2)那么需要满足:(x1-x2)*(y1-y2)<0判断出这是求逆序的问题 
树状数组求逆序,先通过自定义的比较器实现按照一种元素排序,然后再逐次查询和add来获取结果

B - Ping pong POJ 3928 
分析裁判的位置,则可判断求逆序问题。对每个点的裁判,他能举办的比赛场数为左弱*右强+左强*右弱,通过正序和倒序两次插入和查询累加得最终结果

C - Balanced Lineup POJ 3274 
用线段树A的==

D - Mobile phones POJ 1195 
二维树状数组,理解了一维的,二维的也很好理解。一维是前面线上的和,二维的是前面矩形的和。算目标范围也很明确,就是减掉两个矩形的加上多减的一个正方形,维护跟一维的也基本一样

E - MooFest POJ 1990 
首先,最重要的是理解好题意:1.两头牛只要通讯一次就行。每次的耗费是distance*max(v[i],v[j])2.按power还是按position排序。我选的是power,因为position没有重复值。排序这个想法跟Japan那道题是一样的。 
说下思路: 
按照power的升序排好后,依次加入树状数组,每加一次,就查一次,累计一次ans。这个是标准的数组数组的解法。 
但是,树状数组的索引值是牛的坐标的索引值,这就意味着,能力比当前低的牛可能会排到其后面,而且,它们的距离值是需要的。 
这就要求,既能记录到前面有多少头牛,又能记录他们的距离和,后面有多少头牛,和他们的距离和。 
而想到,加点的时候,有一个i来控制,也就是说,在i前面   有    a头牛的话,后面有i-a头,顺着这个想法,那也可以统计坐标和啊。前面加了i头牛,总共的坐标和distance可以累加出来,而在i的坐标前面有(这里的有和加是两回事)的牛的坐标和为sum(data[i].position-1).dist,那么坐标在第i个的后面,而且power比第i个的小的坐标和就是distance-sum(data[i].position-1).dist 
因为是按照power排的序,所以在i前面加的power都比第i个小,也就是说,如果之前加的和第i个通讯的话,取的power指肯定是第i个的 
公式: 
这里的sum(data[i].position).num表示坐标在data[i].position前面的牛的个数 
sum(data[i].position-1).dist    i的坐标前面有(这里的有和加是两回事)的牛的坐标和

ans+=(sum(data[i]-1).num*data[i].position - sum(data[i].position-1).dist + (distance-sum(data[i].position-1).dist - (i-1-sum(data[i]-1).num)*data[i].position ))*data[i].power 
可以化简为 
int x1=sum(data[i]-1).num,x2=sum(data[i].position-1).dist; 
ans+=(data[i].position*(x1*2-i+1) - x2*2 + distance)*data[i].power;

然后distance累加再把当前点add进树状数组就ok了

A-敌兵布阵 hdu 1166
标准的线段树 小细节:a*2+1  =  a<<1|1
开空间的时候,要开MAX<<2
switch(x){
case 1:  ... break;
}

B - I Hate It HDU 1754
基本和A没有很大的区别,只是和变成了最大值

C - A Simple Problem with Integers  HDU 3468
线段树区间更新,模板
lazy标记
注意:pushup()出现在:build()的最后,updata()的最后

D - Count Color POJ 2777
线段树的灵活应用和位运算的技巧
很容易想到用key来存染的颜色,存的技巧:位运算(学习笔记)
区间点的key则可以通过左右孩子的或运算来获得。注意,按照二进制的方法传进颜色的时候,传的是处理过的color

E - Hotel POJ 3667
询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并
查询的时候:
if(左儿子的center >= 要查询的长度)return 在左儿子查询
else 
if(左儿子的右+右儿子的左 >=要查询的长度)return 左儿子的左的起始坐标
else return 在右儿子查询
pushup的时候:
如果左儿子是空的,那么节点的左=左儿子+右儿子的左
如果右儿子是空的,那么节点的右=右儿子+左儿子的右
节点的center=max(左右儿子的center,左儿子的右加上右儿子的左)
其他就是一些细节问题了,不要把自己搞混就好

F - Holedox Eating HDU 4302
小虫子吃蛋糕,注意几个要点:1.虫子会采取就近原则,如果等距就按原来的方向2可能会没有蛋糕
线段树版:
左右来存此区间最左端和最右端的蛋糕的坐标,pushup的时候有以下情况:1左右儿子都空,那就都空2左儿子空,右儿子非空,3左儿子非空,右儿子空和非空 共四种
查询的时候:1左右儿子有一个空,那就再另一个里查找,都空的情况在query以前就判断2距左儿子的右  与  距右儿子的左 ,跟谁近就query哪个,等距就按原方向
一些细节:从0开始的,可以把题目中的坐标都+1
TreeSet版:
一个set存有蛋糕的坐标,利用higher和lower方法来找到左右值,然后比较之。

总结:
线段树问题:单点更新、区间更新、区间查询、区间染色、吃蛋糕问题、区间连续长度查询

A - Language of FatMouse  ZOJ1109
TreeMap的应用,映射,左边是key,右边是value,一般情况下以key为主
TreeMap<String, String> map=new TreeMap<String,String>();这里记得第二个<>也要填好
containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销 
B - For Fans of Statistics  URAL 1613 
二叉查找树,由于一个key可能有多个value,所以TreeMap<Integer, TreeSet<Integer>> map = new TreeMap<Integer, TreeSet<Integer>>();查找的时候注意一些小的优化if (x != null && x.ceiling(l) != null && x.ceiling(l) <= r)
快速io的使用,见学习笔记。
C - Hardwood Species POJ 2418
words statistics TreeMap的简单应用,TreeMap会自动去重,新的会覆盖旧的映射。主要是遍历的方法。见学习笔记。
输出时,java中也有printf,类似C++,格式基本一样。"%.4f"保留四位小数
D - Station
TreeSet的技巧应用
add 和del 都只涉及左右的点,从这里出发,考虑存点,用TreeSet。而在del时暴力遍历一遍找最小的距离。
E - Web Navigation ZOJ 1061
模拟浏览器的操作,关键是题目信息提取的准确性。当前的页面和在back栈顶的页面不一回事。还有forward.clear
F - Argus ZOJ 2212
这题直接交的以前的代码==
不过还挺重要的。要自己写PriorityQueue的Comparator。这个在学习笔记里。
优先级队列,已经封装好的add等,主要思路就是每个period都自己累加,加进队列以后又能是有序的。
G - Plug-in
字符串去重,栈即可。只是在最后的时候,pop的速度非常慢,直接
for (char x : stack)
System.out.print(x);

AC题目简解-数据结构的更多相关文章

  1. AC题目简解-线段树

    线段树: http://www.notonlysuccess.com/index.php/segment-tree-complete/鉴于notonlysuccess大牛的博客对于题目的思路写的很简陋 ...

  2. AC题目简解-dp

    dp类:A - Bridging signals ZOJ 3627 POJ1631 HDU1950给出一个从1-n的数字排列,求最长上升子序列长度.直接说解法吧.新开一个数组d,d[i]表示的是能构成 ...

  3. AC题目简解-数论

    反素数: HDU2521定义对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x ...

  4. [转] AC自动机详解

    转载自:http://hi.baidu.com/nialv7/item/ce1ce015d44a6ba7feded52d AC自动机详解 AC自动机是用来处理多串匹配问题的,即给你很多串,再给你一篇文 ...

  5. python ConfigParser、shutil、subprocess、ElementTree模块简解

    ConfigParser 模块 一.ConfigParser简介ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类 ...

  6. RHCE脚本题目详解

    目录 RHCE脚本题目详解 题目一 shell脚本之if语句实现: shell脚本之case语句实现: 题目二 实现 测试 解析 写在后面 RHCE脚本题目详解 题目一 在system1上创建一个名为 ...

  7. (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)

    --------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...

  8. 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ

    前言 不说话,先猛戳 Ranklist 看我排名. 这是用 node 自动刷题大概半天的 "战绩",本文就来为大家简单讲解下如何用 node 做一个 "自动AC机&quo ...

  9. 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)

    PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...

随机推荐

  1. md5值计算

    1.md5(Message Digest 5th/消息概要加密算法 第5版) REFER: MD5 On wikipedia 2.应用范围 ① 验证下载文件的完整性 ② 3.关于MD5的几个问题 ①只 ...

  2. 关键字 explicit

    C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA ...

  3. 阿里云 centos 环境配置与 django 部署

    1. 免密码登陆 # 本机生成密钥, 并将 pub 复制到阿里云服务器上 $ ssh-keygen -t rsa -P '' # -P表示密码,-P '' 就表示空密码 $ scp ~/.ssh/FI ...

  4. httpd 配置用户访问认证

    需求:单用户访问网站的某个目录,需要使用帐号密码来登录才能访问. 一.编辑虚拟主机的配置文件,添加目录级访问限制 <Directory "/var/www/html/demo" ...

  5. 构造函数继承关键apply call

    主要我是要解决一下几个问题: 1.        apply和call的区别在哪里 2.        apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和 ...

  6. 用PHP生成随机数的函数

    转自:http://www.jbxue.com/article/5034.html 介绍:在早期的php中生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生 ...

  7. c语言背后的运行机制

    目的:通过分析c语言转换成汇编代码后的执行过程对汇编语言和X86构架有一个初步认识 实验代码 #include <stdio.h> int g(int x) { ; } int f(int ...

  8. Fedora 命令

    1. 更新包 yum clear all yum -y update 2.yum包查找 yum whatprovides xxxx.os.l 3 df 查看磁盘空间 xclip 复制到粘贴板 xcli ...

  9. VS2010中无法嵌入互操作类型“......”,请改用适用的接口的解决方法

  10. 用上新的电脑装上了VS2013了

    今天老魏终于把配置好的电脑拿回来了,16G的内存,I7 4770CPU.这回啊,老魏终于可以舍弃我的本本了,装上了SQL Server,虚拟机等等运行高内存的程序,感觉就是爽.明天老魏就可以用VS20 ...