set的用法一直拖着,今天才算真正会了,小小总结一下(我好菜啊啊啊)

#include<bits/stdc++.h>

using namespace std;
set<int> s;int n,x,a[]; int main(){
freopen("7.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),s.insert(a[i]); set<int>::iterator it;
//遍历
for(it=s.begin();it!=s.end();it++)
//s.end()实际上没有值,s.end()迭代器指向的东西已经超出数组本身内容,
//若要返回的值实际上是set的size
cout<<*it<<" ";cout<<endl;
//查找值所对应的迭代器
it=s.lower_bound();
//对于无重复元素的set lower_bound和upper_bound无区别
//输出迭代器所指向的值
cout<<*it<<endl; return ;
}
//5
//8 4 2 6 10

例题:

巧克力

【问题背景】

平面直角坐标系中有一块长方形的巧克力。左下角坐标是(0,0),右上角坐标是(n,m)。现在要在这块巧克力上切p刀,求每次切完后,最大的一块完整的巧克力的面积。

【输入格式】

第一行三个正整数n,m,p。表示巧克力的大小和要切割的次数。

以下p行每行一个大写字母ci和一个整数ai。

若ci=‘V’则表示从x=ai处切割;若ci=‘H’则表示从y=ai处切割。

【输出格式】

输出一共p行,第i行为第i次切割后的答案。

【输入样例】

7 6 5

H 4

V 3

V 5

H 2

V 1

【输出样例】

28

16

12

6

4

【样例说明】

【数据范围】

50%的数据:p<=1000。

100%的数据:p,m,n<=100000。

思路:naive的我开始真的啥都不会啊,暴力写了个sort(因为真的不知道set能自动排序....辣鸡如我)

code 1   50分

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
int n,m,p,k,top1,top2,FG,x[N],y[N];char opt[];
LL mx; void find(){mx=;
if(FG==) sort(x+,x++top1);
if(FG==) sort(y+,y++top2);
for(int i=;i<=top1;i++)
for(int j=;j<=top2;j++)
mx=max(mx,(LL)(x[i]-x[i-])*(y[j]-y[j-]));
} int main(){
freopen("chocolate.in","r",stdin);
freopen("chocolate.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
x[++top1]=n;y[++top2]=m;
for(register int i=;i<=p;i++){
scanf("%s%d",opt,&k);
if(opt[]=='V') x[++top1]=k,FG=;
if(opt[]=='H') y[++top2]=k,FG=;
find();printf("%lld\n",mx);
}
return ;
}

后来胡乱瞄了一眼std发现要用set,所以写了如下的set代码,(真的巨麻烦)

set维护位置,priority_queue维护大小,但是优先队列不能遍历,所以就打标记代表它已经被用掉了,虽然麻烦点但是不知道为甚恶魔有些WA掉了,40分(还不如暴力sort,嘤嘤嘤)

code2 40分

#include<bits/stdc++.h>
#define LL long long
using namespace std; const int N=1e6+;
struct nodex{
int l,r,siz,id;
bool operator<(const nodex& a)const{
return siz<a.siz;}
};priority_queue<nodex> qx,qy; set<int> sx,sy;
char opt[];
int n,m,p,k,cntx[N],cnty[N]; void changex(int k2){
set<int>::iterator it1,it2;
it2=sx.lower_bound(k2);
it1=--it2;++it2; int k1=*it1,k3=*it2; sx.insert(k2);
qx.push((nodex){k1,k2,k2-k1,++cntx[k1]});
qx.push((nodex){k2,k3,k3-k2,++cntx[k2]});
}
void changey(int k2){
set<int>::iterator it1,it2;
it2=sy.lower_bound(k2);
it1=--it2;++it2; int k1=*it1,k3=*it2;sy.insert(k2);
qy.push((nodex){k1,k2,k2-k1,++cnty[k1]});
qy.push((nodex){k2,k3,k3-k2,++cnty[k2]});
}
int main(){
freopen("chocolate.in","r",stdin);
freopen("chocolate.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
sx.insert();sx.insert(n);qx.push((nodex){,n,n,++cntx[]});
sy.insert();sy.insert(m);qy.push((nodex){,m,m,++cnty[]});
for(int i=;i<=p;i++){
scanf("%s%d",opt,&k);
if(opt[]=='V') changex(k);
if(opt[]=='H') changey(k);
int mxx=,mxy=;
while(!qx.empty()){
nodex u=qx.top();
if(u.id!=cntx[u.l]) qx.pop();
else{mxx=u.siz;break;}
}
while(!qy.empty()){
nodex u=qy.top();
if(u.id!=cnty[u.l]) qy.pop();
else{mxy=u.siz;break;}
}
printf("%lld\n",(LL)mxx*mxy);
}
return ;
}

最后认真看了题解,学了set发现,这题不就是个大水题么,multiset轻松搞过,,,(辣鸡如我*2)

code 3 AC

#include<bits/stdc++.h>
#define LL long long
using namespace std; const int N=1e6+; set<int> sx,sy;
multiset<int> mx,my;
char opt[];int n,m,p,k; int main(){
freopen("chocolate.in","r",stdin);
freopen("chocolate.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
sx.insert();sx.insert(n);
sy.insert();sy.insert(m);
mx.insert(n);my.insert(m);
for(int i=;i<=p;i++){
scanf("%s%d",opt,&k);
int mxx=,myy=;
if(opt[]=='V'){
set<int>::iterator it;
it=sx.lower_bound(k);
int v=*it,u=*(--it);
sx.insert(k); mx.erase(mx.lower_bound(v-u));
mx.insert(v-k);
mx.insert(k-u);
}if(opt[]=='H'){
set<int>::iterator it;
it=sy.lower_bound(k);
int v=*it,u=*(--it);
sy.insert(k); my.erase(my.lower_bound(v-u));
my.insert(v-k);
my.insert(k-u);
}mxx=*(mx.rbegin());myy=*(my.rbegin());
printf("%lld\n",(LL)mxx*myy);
}
return ;
}

完结撒花!!

set用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  10. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

随机推荐

  1. centos7安装sonarqube6.7 代码质量管理平台

    应用介绍:SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量通过插件形式:    可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groov ...

  2. MySQL 到底能不能放到 Docker 里跑?

    https://weibo.com/ttarticle/p/show?id=2309404296528549285581 前言 前几月经常看到有 MySQL 到底能不能放到 Docker 里跑的各种讨 ...

  3. An Introduction to OAuth 2

    PostedJuly 21, 2014 1.1mviews SECURITY API CONCEPTUAL Mitchell Anicas Introduction OAuth 2 is an aut ...

  4. JavaScript深入之执行上下文栈

    如果要问到 javascript 代码执行顺序的话,想必写过javascript的开发者都会有个直观的印象,那就是顺序执行,例如: var foo = function(){ console.log( ...

  5. python的异步IO模块

    asyncio模块:示例一 import asyncio @asyncio.coroutine def func1(): print('before...func1......') yield fro ...

  6. discuz 3.1论坛快照被百度劫持解决方案

    最近很郁闷,遇到一个很棘手的问题.我们公司有个论坛在百度查看快照信息的时候全部都是博彩信息,但是打开却无博彩信息显示.在快照中查看是这样的 百度快照查看图: 经过思考,怀疑是网站中有网页被改动了,在某 ...

  7. Luogu P3966 [TJOI2013]单词

    题目链接 \(Click\) \(Here\) 本题\(AC\)自动机写法的正解之一是\(Fail\)树上跑\(DP\). \(AC\)自动机是\(Trie\)树和\(Fail\)树共存的结构,前者可 ...

  8. nginx最简安装

    在 CentOS 6.2  下安装nginx 一:nginx所需依赖的安装 用yum安装依赖: yum -y install zlib zlib-devel openssl openssl-devel ...

  9. python3: 爬虫---- urllib, beautifulsoup

    最近晚上学习爬虫,首先从基本的开始: python3 将urllib,urllib2集成到urllib中了, urllib可以对指定的网页进行请求下载,  beautifulsoup 可以从杂乱的ht ...

  10. M1-day08-数据库加锁

    一.关于数据库加锁主要分为几类 1.原生sql 1.开启事物 begin; select * from host for update; commit; 注意:INNODB支持表锁和行锁,MyISAM ...