非常思维的一道题目,题意很长

给定s1,s2两个集合,s1维护最大值,s2维护最小值,s1的所有元素要比s2小

操作1:往两个集合里的任意一个添加x

操作2:把x从所在的集合里删掉:要求被删的x必须是s1里最大的元素或s2里最小的元素

因为操作2的要求十分严格。。我们可以想到在最后一次操作2结束前所有的操作1都是确定下来的

那我们先来考虑最后一次操作2之前的操作1:

  每次加x,但是不知道x往哪里加,那就直接用一个大集合S,把x加进去

直到出现一个操作2:操作2给出的x必然在集合S的某个位置,那比x小的元素必定被划分到集合s1中,比x大的元素被划分到s2中,此时之前的操作添加的数都有确定的位置了,并且两个集合的最大值L,最小值R也确定下来了

然后接下去的操作1就是往集合里面加元素,操作2就进行重新划分+更新L,R,并且每次操作2都有两种选择,即x从s1里删去还是从s2里删去 ( 除了两种特殊情况:无解和x恰好==L,R边界 )

最后一次操作2后,cnt次操作1添加的数都没有确定的划分,所以再乘上cnt+1种选择

#include<bits/stdc++.h>
#include<set>
using namespace std;
#define ll long long
#define maxn 400005
#define mod 1000000007
#define INF 0x3f3f3f3f3f3f
ll n,x,L,R;
char op[];
set<ll>s;
set<ll>::iterator it; int main(){
cin>>n;ll ans=;
L=-INF,R=INF;
s.insert(INF);s.insert(-INF);
it=s.begin(); int cnt=;
for(int i=;i<=n;i++){
scanf("%s%lld",op,&x);
if(op[]=='D'){
if(x>=L && x<=R)cnt++;
s.insert(x);
}
else {
cnt=;
if(x<L || x>R){
puts("");
return ;
}
else if(x!=L && x!=R)ans=ans*%mod;
//这里要注意因为所有的元素都不相等,所以当要删除边界时只有一种选择 it=s.lower_bound(x);
it++;R=*it;
it--;it--;L=*it;
it++;s.erase(it);
}
}
cout<<ans*(++cnt)%mod<<endl;
}

集合划分——cf1028D思维题的更多相关文章

  1. BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】

    [题解] 思维题,看了别人的博客才会写. 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻 ...

  2. CF--思维练习-- CodeForces - 215C - Crosses(思维题)

    ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...

  3. Codeforces 878D - Magic Breeding(bitset,思维题)

    题面传送门 很容易发现一件事情,那就是数组的每一位都是独立的,但由于这题数组长度 \(n\) 很大,我们不能每次修改都枚举每一位更新其对答案的贡献,这样复杂度必炸无疑.但是这题有个显然的突破口,那就是 ...

  4. 洛谷 P4749 - [CERC2017]Kitchen Knobs(差分转换+dp,思维题)

    题面传送门 一道挺有意思的思维题. 首先有一个 obvious 的结论,就是对于每个炉子,要么转到哪里都符合条件,要么存在唯一的最大值.对于转到哪儿都符合条件的炉子我们 duck 不必考虑它,故我们只 ...

  5. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  6. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  7. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  8. 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)

    思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...

  9. C. Nice Garland Codeforces Round #535 (Div. 3) 思维题

    C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. MDK(KEIL) 两步解决 中文乱码 及 中文光标 半个半个跳的问题

    1. 如果已经用MDK(KEIL)的默认设置写了好多中文,那么先用notepad把文件一一打开然后转变编码格式为 utf-8 without ROM,如下: 2. 如果还没有开始编辑,或者已经用not ...

  2. python调用tushare获取沪股通、深股通成份股数据

    接口:hs_const 描述:获取沪股通.深股通成分数据 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称      |      类型      |      必选      ...

  3. 实时收集Storm日志到ELK集群

    背景 我们的storm实时流计算项目已经上线几个月了,由于各种原因迟迟没有进行监控,每次出现问题都要登录好几台机器,然后使用sed,shell,awk,vi等各种命令来查询原因,效率非常低下,而且有些 ...

  4. 2019-8-31-dotnet-数组自动转基类数组提示-Co-variant-array-conversion-是什么问题

    title author date CreateTime categories dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题 lindexi ...

  5. GetOpenFilename的基本用法(文件夹实操)

    Sub 数据导入()Dim f, arr, i&, j&, k, m%, n%, p%, sh As Workbookf = Application.GetOpenFilename(f ...

  6. js 本地预览图片和得到图片实际大小

    //填充预览图片 function adpter(file, upfile) { var imgName = new Date().getTime() + file.name.substr(file. ...

  7. 新建Application 报错android.app.Application cannot be cast

    我在开发APP的时候重新使用了一个类,继承了android.app.Application.但是在运行的时候提示java.lang.ClassCastException: android.app.Ap ...

  8. fiddler突然间抓不到包了

    1.一直使用fiddler抓包,但是近几天fiddler突然间抓不到过滤地址的包了. 2.重装fiddler,未能解决. 3.设置取消浏览器的代理,未能解决. 4.关闭杀毒软件,未能解决. 5.换了火 ...

  9. C++——虚继承(不要使用,会导致二义性)

    如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性 总结: 如果一个派生类从多个基类派生,而这些基类又有一个共同 的基类,则在对该基类中声明 ...

  10. MyEclipse搭建Structs2开发环境

    MyEclipse10搭建Strust2开发环境 - 孤傲苍狼 - 博客园https://www.cnblogs.com/xdp-gacl/p/3496242.html