题意:n*m的方格,“0 x”表示x轴在x位置切一刀,“0 y”表示y轴在y位置切一刀,每次操作后输出当前面积最大矩形. 思路:用set分别储存x轴y轴分割的点,用multiset(可重复)储存x轴y轴边,每次输出最大的长和最大的宽的积.题目可能重复切.multiset如果直接erase(13)会把所有的13都删掉,如果只想删一个则erase(multiset.find(13)).第一次知道set自带二分... 这里multiset也可以用map<int, int, greater<int&g…
1.set.insert(elem);     //在容器中插入元素. 2.set.begin();         //返回容器中第一个数据的迭代器. 3.set.end();          //返回容器中最后一个数据之后的迭代器. 4.set.rbegin();        //返回容器中倒数第一个元素的迭代器. 5.set.rend();         //返回容器中倒数最后一个元素的后面的迭代器. 使用方法如下: 1 #include <iostream> 2 #include…
ADAFIELD - Ada and Field 这个题,如果用一个字来形容的话:-----------------------------------------------嗯! 题意:n*m的空白矩形坐落在XY轴,Q次操作,每次可以在y轴或x轴的矩形区域内画一条直线,是直线啊.问每次操作后最大的矩形面积多大. 对于思路我只能拍手称赞了,一开始想不到怎么优化,想着用优先队列或set来存当前边的最大值,但是更新的时候却 无法实时更新.赛后看其他选手的代码才突然想到可以用map的键值来排序,每次插…
STL笔记(1)map STL之map ZZ from http://hi.baidu.com/liyanyang/blog/item/d5c87e1eb3ba06f41bd576cf.html 1.map中的元素其实就是一个pair. 2. map的键一般不能是指针, 比如int*, char*之类的, 会出错. 常用的就用string了,int也行. 3. map是个无序的容器, 而vector之类是有序的. 所谓有序无序是指放入的元素并不是按一定顺序放进去的, 而是乱序, 随机存放的(被映…
vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷)-----空间分配导致迭代器失效 vector源码3(参考STL源码--侯捷):pop_back.erase.clear.insert #include<bits/stdc++.h> using namespace std; int main(){ vector<,); vector<int>::iterator it=v.begin(); c…
每次忘记都去查,真难啊 /* C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 */ /* vector常用用法 */ //头文件 #include<vector> //常用的初始化方法 vector<int> v; //直接定义一个整型元素的向量 且未声明长度,其中int的位置可以换成别的数据类型或者结构体等 vector<); //定义了10个整型元素的向量,其中每一个数都没有初值 vector<, )…
STL中的Set和Map 先来看一段网络上的文字描述: 上图是一段关于STL中Set集合的描述,同样的,也近似适合Map的描述.上述文字中,描述了最为重要的特征: Set和Map,底层调用了红黑树的结构,并且实现的是一种自动平衡二叉搜索树. Set 平衡二叉搜索树(Set) 如上图,STL中Set实现的本质是),insert(5),则只会执行第一次的insert操作.后续的插入,并不会执行,因为Set结构的树中无重复元素. 另一个点在于,Set中被插入的键不能被修改,也就是通过迭代器修改键值是不…
Ada the Ladybug lives near an orange tree. Instead of reading books, she investigates the oranges. The oranges on orange tree can be in up to 5*50 Shades of Orange. She walks from orange to orange, examining different properties of orange tree. The o…
[题目链接] https://www.spoj.com/problems/ADATRIP/ [算法] 直接使用dijkstra堆优化算法即可 [代码] #include<bits/stdc++.h> using namespace std; ; const int INF = 2e9; struct edge { int to,w,nxt; } e[MAXN << ]; int i,j,tot,a,b,l,n,m,u,q; int head[MAXN]; pair<int,i…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 N 的序列 A,将其划分成 K + 1 段,划分的代价为每一段中两两元素的异或之和. 求最小划分代价. 1 ≤ K < N ≤ 5000,0 ≤ Ai ≤ 10^9. 原题戳这里. @solution@ 一个朴素的 dp:定义 dp[i][j] 表示将前 j 个数划分成 i 段的最小代价. 转移时枚举 k <= j,用 dp[i-1][k-1]…
0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑 张三丰-武当掌门人,太极拳创始人 东方不败-第一高手,葵花宝典 ... 这些信息如果保存下来并不复杂,但是找起来比较麻烦.例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较.如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分…
1.结构 set和multiset会根据特定的排序原则将元素排序.两者不同之处在于,multisets允许元素重复,而set不允许重复. 只要是assignable.copyable.comparable(根据某个排序准则)的型别T,都可以成为set或者multisets的元素.如果没有特别的排序原则,采用默认的less,已operator < 对元素进行比较,以便完成排序. 排序准则必须遵守以下原则: 必须是“反对称的”,对operator <而言,如果x < y为真,y<x为假…
1.Set和multiset容器 1)set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. 2)set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树.在插入操作和删除操作上比vector快. 3)set不可以直接存取元素.(不可以使用at.(pos)与[]操作符). 4)multiset与set的区别:set支持唯一键值,每个元素值只能出现一次:而multiset中同一值可以出现多次. 5)不可以直接修改set或m…
SGI STL中set/map底层都是通过RB-tree实现的. 首先看看RB-tree结点的定义 typedef bool __rb_tree_color_type; const __rb_tree_color_type __rb_tree_red = false; const __rb_tree_color_type __rb_tree_black = true; // 结点的基类 struct __rb_tree_node_base { typedef __rb_tree_color_ty…
set是与集合相关的容器,STL为我们提供了set的实现,在编程题中遇见集合问题直接调用是十分方便 SET set模版类的定义在头文件<set>中. 定义set对象的示例代码如下: set<int> s; set<double> ss; set的基本操作: (set默认从小到大排序) s.begin() // 返回指向第一个元素的迭代器 s.clear() // 清除所有元素 s.count() // 返回某个值元素的个数 s.empty() // 如果集合为空,返回t…
(1)使用set/multiset之前必须包含头文件<set>:#include<set> (2)namespace std{ template <class T, class Compare = less<T>, class Allocator = allocator<T> > class set; template <class T, class Compare = less<T>, class Allocator = al…
1.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. map的具体实现采用红黑树变体的平衡二叉树的数据结构.在插入操作和删除操作上比vector快. map可以直接存取key所对应的value,支持[]操作符,如map[key]=value. multimap与map的区别:map支持唯一键…
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chinese necessarily. The differences between these containers are : The keys of set and map are unique, but they could be multiple for multiset and multimap…
set是一个集合容器,其中包含的元素是唯一的,集合中的元素是按照一定的顺序排列的.元素插入过程是按照排序规则插入,所以不能使用指定位置插入. set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树.在插入操作和删除操作上比vector快. set不可以直接存取元素,(不可以使用at.(pos)与[]操作符 multiset与set的区别:set支持唯一键值,每个元素都只能出现一次,而multiset中同一值可以出现多次. 不可以直接修改set或multiset容器中的元素值,因为该类容器是自动…
set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. constructing sets #include #include using namespace std ; int main() { int a[] = {2,1,3,4,5,6,8,7} ; set s(a,a+8) ; set::iterator iter = s.begin() ; for( ; iter != s.end() ; iter++) cout 向对象中插入元素:…
10.2.9 Map和multimap容器 map/multimap的简介 ²  map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ²  map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. ²  map的具体实现采用红黑树变体的平衡二叉树的数据结构.在插入操作和删除操作上比vector快. ²  map可以直接存取key所对应的value,支持[]操作符,如map[key]…
1. 所在头文件: <set>, 命名空间: std ; 声明如下: namespace std{ template <class T, class Compare = less<T>, class Allocator = allocator<T> > class set; template <class T, class Compare = less<T>, class Allocator = allocator<T> >…
集合 转载于:http://blog.csdn.net/longshengguoji/article/details/8546286 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和multiset内部以平衡二叉树实现 1.   常用函数 1)        构造函数和析构函数 set c:创建空集合,不包含任何元素 set c(op):以op为排序准则,产生一个空的…
I.vector 1.头文件:#include<vector>                        //容器vector是一个能实现随机存取.插入删除的动态数组,还可以当栈使. 2.创建: vector<int> v1;                             // < >里可以是struct或者vector嵌套:vector< vector<int> > ivec; vector是一个类模板,创建一个vector的过程…
一,map和multimap的概念 1.map和multimap的基本知识 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的,不能指定插入位置. map的底层数据结构是红黑树变体的平衡二叉树.在插入和删除操作中比vector要快. map可以直接存取key所对应得value,支持[]操作符,如map[key] = value; multim…
(1)使用set/multiset之前必须包含头文件<set>:#include<set>    (2)namespace std{      template <class T, class Compare = less<T>,                class Allocator = allocator<T> >      class set;           template <class T, class Compare…
map就是从键(key)到值(value)的映射. 因为重载了[]运算符,map像是数组的”高级版“. 例如,map<string,int>month_name 表示:”月份名字到月份编号“的映射. :(类似于 month_name["string"]=int ) 例题5-4 Problem Most crossword puzzle fans are used to anagrams--groups of words with the same letters in di…
1. set.find(elem); //查找elem元素,返回指向elem元素的迭代器. 1 #include <iostream> 2 #include <set> 3 4 using namespace std; 5 6 int main() 7 { 8 set<int> setInt; 9 10 cout << "插入20个元素" << endl << endl; 11 for (int i = 0; i…
set.clear();             //清除所有元素 set.erase(pos);     //删除pos迭代器所指的元素,返回下一个元素的迭代器. set.erase(beg,end);    //删除区间[beg,end)的所有元素,返回下一个元素的迭代器. set.erase(elem);     //删除容器中值为elem的元素. 代码例子: 1 #include <iostream> 2 #include <set> 3 4 using namespace…
1. set.size();  //返回容器中元素的数目 2. set.empty();//判断容器是否为空 empty() 是由一下代码实现的,可以发现,当长度为0时返回 false,以此判断容器为空 1 _NODISCARD bool empty() const noexcept 2 { 3 return size() == 0; 4 } 注意事项: 与 vector.deque 的连续存储不同,set 是拥有红黑树实现的,他没有 resize() 方法 代码例子: 1 #include <…