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

给定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. MPU-6000 与 MPU-6050

    VLOGIC 是什么呢?

  2. Qt学习笔记----信号与槽实现的四种方式

    1.以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked() 2.选择菜单“编辑”,找 ...

  3. Read-Write lock 看可以,不过看的时候不能写

    当线程“读取”实例的状态时,实例的状态不会改变,只有线程对实例“写入”操作时才会改变.read-write lock 模式将读取和写入分开来处理,在读取数据前获取读锁定,而写入之前,必须获取写锁定. ...

  4. iOS音频开发系列-概述篇

    概述 iOS中对于音频的处理,苹果提供了两个库. AVFoundation AudioToolbox 在iOS系统中apple对上述的流程进行了封装并提供了不同层次的接口

  5. Spark RDD基本操作

  6. win10 +Kinect V1 1414环境配置

    win10 +Kinect V1 1414环境配置 想起老Lab的机器人头顶的Kinect 安装准备 demo展示 人脸识别 照片不能够检测到人脸 可以去除背景 检测骨架 想起老Lab的机器人头顶的K ...

  7. UC浏览器禁止图片阅读模式处理方法

    本文转载自:https://www.cnblogs.com/MY0101/p/9969818.html UC浏览器点击图片会出现图片阅读模式. 如何处理? <img style=" w ...

  8. CSIC_716_20191101【编程语言、变量、垃圾回收机制】

    编程语言分类:机器语言.汇编语言.高级语言. 机器语言:机器能直接识别的程序语言或指令代码(二进制指令),勿需经过翻译,每一操作码在计算机内部都有相应的电路来完成它 汇编语言:比机器语言略高级,用英文 ...

  9. ES5数组扩展

    ES5给数组对象添加了一些方法, 常用的5个: 1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标 2. Array.prototype.lastInd ...

  10. matplotlib 画图颜色参数值及对应色卡

     matplotlib 色卡对应参数值 cnames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', ...