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. NOIp2018 游记

    作为一名蒟蒻,对于NOIp当然是不抱什么希望.所以就只能在比赛中吸取经验咯... Day0 害怕书到用时方恨少,疯狂打板子(玩电脑) Day1 来到考场了,发现键盘空格按不起,觉得非常尴尬,然后他告诉 ...

  2. A1120. Friend Numbers

    Two integers are called "friend numbers" if they share the same sum of their digits, and t ...

  3. Vue+koa2开发一款全栈小程序(4.Koa入门)

    1.Koa是什么? 基于nodejs平台的下一代web开发框架 1.Express原班人马打造,更精简 2.Async+await处理异步 3.洋葱圈型的中间件机制 新建一个koa项目 1.打开cmd ...

  4. 真机控件获取 app-inspector

    1.安装app-inspector:npm  install  app-inspector  -g 若是要卸载原有的:npm   uninstall   app-inspector   -g   np ...

  5. 逻辑回归 代价函数J关于系数theta求导

    J=-y*loga-(1-y)*log(1-a) 梯度下降,求dJ/d_theta_j

  6. Oracle的DQL

    基本查询: 链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl SQL> --清屏 SQL> host cls (host clear) ...

  7. Day036--Python--线程

    1. 线程 from threading import Thread def func(n): print(n) if __name__ == '__main__': t = Thread(targe ...

  8. mybatis源码分析(方法调用过程)

    十一月月底,宿舍楼失火啦,搞得20多天没有网,目测直到放假也不会来了... 正题 嗯~,其实阅读源码不是为了应付面试,更重要的让你知道,大师是怎样去写代码的,同样是用Java,为啥Clinton Be ...

  9. mysql 5.7安装准备

    在5.5之后的mysql安装中,需要使用cmake来指定安装参数,下面列出关于cmake的几个常用参数: CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/loca ...

  10. 如何修改const常量值

    总结:这个跟计算机语言类别和编译器有关,本文是在linux环境下说明的. 分两种情况: 1. C语言: 2. C++语言: /*! * \Description: * \author scictor ...