热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【51NOD1981】如何愉快地和STL玩耍?

题面驴蛋蛋在愉快地与STL玩耍突然间小A跳了出来对驴蛋蛋说,看你与STL玩的很开心啊,那我给你一个大小为N的vector,这个vector上每个位置上是一个set,每次我
题面

驴蛋蛋在愉快地与STL玩耍

突然间小A跳了出来对驴蛋蛋说,看你与STL玩的很开心啊,那我给你一个大小为N的vector,这个vector上每个位置上是一个set,

每次我会在闭区间 [L,R] 中的每个set里插入一个数c,或者询问 [L,R] 区间所有set里所有数拿下来排序之后的严格第K小,现在你还开心吗,红红火火恍恍惚惚韩寒会画红槐花!!!!

小A走了,留下驴蛋蛋一个人外加一个长度为 N 的vector >在风中凌乱,你能帮驴蛋蛋解除凌乱吗?

根据小A的 C++2.33 标准vector可以被视作一个数组,下标从 1 开始,大小不得超过65536

set是一个集合,其中的数不得超过 10000 并且会被自动去重

小A最多会进行Q 次(不超过 65536)完全符合 C++2.33标准的操作,但如果出现询问时[L,R]区间里不足K个数的情况,你只需要对小A回答−1就好了

分析

传说中的毒瘤题?线段树+永久延迟标记+二分+bitset

空间不够,被逼写了一次非结构体线段树,这样只用开两倍了。

bitset以前写到过一次,stl黑科技。bitset的第i位为1表示i这个数在这个结点的集合里。

二分之前先查询一次,把查询区间的数都染成1。

为助于理解,把pre数组打印出来了,二分的原理应该也很明显了吧?

10000000000
11000000000
11100000000
11110000000
11111000000
11111100000
11111110000
11111111000
11111111100
11111111110
11111111111

代码

#include
using namespace std;
#define N 10010
#define M 65540
#define lc (p<<1)
#define rc (p<<1|1)
struct email
{bitset
lazy,bit;
}t[M
*2];
int n,q,k,ql,qr,op,cnt;
bitset
ans[M],pre[N],tmp;inline void update(int p,int l,int r)
{t[p].bit[k]
&#61;1;if(ql<&#61;l&&qr>&#61;r){t[p].lazy[k]&#61;1;return ;}int mid&#61;l&#43;r>>1;if(ql<&#61;mid)update(lc,l,mid);if(qr>mid) update(rc,mid&#43;1,r);
}inline
void query(int p,int l,int r)
{
if(ql<&#61;l&&qr>&#61;r){ans[cnt]|&#61;t[p].bit;return ;}ans[cnt]|&#61;t[p].lazy;int mid&#61;l&#43;r>>1;if(ql<&#61;mid)query(lc,l,mid);if(qr>mid) query(rc,mid&#43;1,r);
}inline
int check(int mid)
{tmp
&#61;ans[cnt]&pre[mid];if(tmp.count()>&#61;k)return 1;return 0;
}inline
void solve()
{
if(k&#61;&#61;0){puts("-1");return ;}cnt&#43;&#43;;query(1,1,n);if(ans[cnt].count()"-1");return ;}int l&#61;0,r&#61;N-2,ans,mid;while(l<&#61;r){mid&#61;l&#43;r>>1;if(check(mid))ans&#61;mid,r&#61;mid-1;else l&#61;mid&#43;1;}printf("%d\n",ans);
}
int main()
{scanf(
"%d%d",&n,&q);pre[0][0]&#61;1;for(int i&#61;1;i)pre[i]&#61;pre[i-1],pre[i][i]&#61;1;while(q--){scanf("%d%d%d%d",&op,&ql,&qr,&k);if(op&#61;&#61;1)update(1,1,n);else solve();}return 0;
}

 

转:https://www.cnblogs.com/NSD-email0820/p/9817508.html



推荐阅读
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
author-avatar
忄幹_856
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有