set用法
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用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
随机推荐
- centos7安装sonarqube6.7 代码质量管理平台
应用介绍:SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量通过插件形式: 可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groov ...
- MySQL 到底能不能放到 Docker 里跑?
https://weibo.com/ttarticle/p/show?id=2309404296528549285581 前言 前几月经常看到有 MySQL 到底能不能放到 Docker 里跑的各种讨 ...
- An Introduction to OAuth 2
PostedJuly 21, 2014 1.1mviews SECURITY API CONCEPTUAL Mitchell Anicas Introduction OAuth 2 is an aut ...
- JavaScript深入之执行上下文栈
如果要问到 javascript 代码执行顺序的话,想必写过javascript的开发者都会有个直观的印象,那就是顺序执行,例如: var foo = function(){ console.log( ...
- python的异步IO模块
asyncio模块:示例一 import asyncio @asyncio.coroutine def func1(): print('before...func1......') yield fro ...
- discuz 3.1论坛快照被百度劫持解决方案
最近很郁闷,遇到一个很棘手的问题.我们公司有个论坛在百度查看快照信息的时候全部都是博彩信息,但是打开却无博彩信息显示.在快照中查看是这样的 百度快照查看图: 经过思考,怀疑是网站中有网页被改动了,在某 ...
- Luogu P3966 [TJOI2013]单词
题目链接 \(Click\) \(Here\) 本题\(AC\)自动机写法的正解之一是\(Fail\)树上跑\(DP\). \(AC\)自动机是\(Trie\)树和\(Fail\)树共存的结构,前者可 ...
- nginx最简安装
在 CentOS 6.2 下安装nginx 一:nginx所需依赖的安装 用yum安装依赖: yum -y install zlib zlib-devel openssl openssl-devel ...
- python3: 爬虫---- urllib, beautifulsoup
最近晚上学习爬虫,首先从基本的开始: python3 将urllib,urllib2集成到urllib中了, urllib可以对指定的网页进行请求下载, beautifulsoup 可以从杂乱的ht ...
- M1-day08-数据库加锁
一.关于数据库加锁主要分为几类 1.原生sql 1.开启事物 begin; select * from host for update; commit; 注意:INNODB支持表锁和行锁,MyISAM ...