HDU-Yuna's confusion 树状数组 Or Multiset

比赛的时候竟然没有想到这题可以用树状数组过,由于数字的区间比较小,所以直接开设一个树状数组,定义sum(i) 表示小于i的数的总数。那么判定一个数是否有的条件就是计算sum(i+1) == sum(i) 便可以了,查找第K大的数,也就可以直接二分了。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAXN 100000
using namespace std;int c[MAXN+5];int lowbit(int x)
{return x & -x;
}void modify(int x, int val)
{for (int i = x; i <= MAXN; i += lowbit(i)) {c[i] += val;}
}int sum(int x)
{int ret = 0;for (int i = x; i > 0; i -= lowbit(i)) {ret += c[i];}return ret;
}int bsearch(int l, int r, int k)
{int mid, ret = -1;while (l <= r) {mid = (l + r) >> 1;//    printf("mid = %d, sum() = %d\n", mid, sum(mid));//    getchar();if (sum(mid) >= k) {ret = mid;r = mid - 1;    }else {l = mid + 1;    }}return ret;
}int main()
{int M, x, y, ret;char op[5];while (scanf("%d", &M) == 1) {memset(c, 0, sizeof (c));for (int i = 1; i <= M; ++i) {scanf("%s", op);if (op[0] == 'A') {scanf("%d", &x);modify(x, 1);    }else if (op[0] == 'D'){scanf("%d", &x);//    printf("%d %d\n", sum(x), sum(x-1));if (sum(x) == sum(x-1)) {puts("No Elment!");}else {modify(x, -1);}}else {  // query通过二分查找来对付 scanf("%d %d", &x, &y);y += sum(x);ret = bsearch(x+1, MAXN, y);if (ret == -1) {puts("Not Find!");}else {printf("%d\n", ret);}}}    }return 0;    
}

还有一种做法,就是直接用STL中的multiset.

代码如下:

#include<iostream>
#include<algorithm>
#include<set>
using namespace std;multiset<int> s;
multiset<int>::iterator it;int main(){int Q;while( ~scanf("%d",&Q)){s.clear();char ope[10];int x,k;for(int i = 1; i <= Q; i++){scanf("%s", ope);if( ope[0] == 'A' ){scanf("%d",&x);s.insert(x);    }else if( ope[0] == 'D' ){scanf("%d",&x);int cnt = s.count(x);if( cnt == 0 ){puts("No Elment!");continue;    }s.erase(x);for(int i = 1; i <= cnt-1; i++)s.insert(x);    }else {scanf("%d%d",&x,&k);it = s.upper_bound(x);if( it == s.end() ){//|| (it+(k-1) >= s.end() ) ){puts("Not Find!");continue;}    int i=1;for(; it != s.end() && i < k; i++, it++); if( it == s.end() ){puts("Not Find!");continue;}printf("%d\n", *(it) );}}    }    
}

转载于:https://www.cnblogs.com/Lyush/archive/2012/08/12/2635387.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统etc什么意思,etc.是什么意思 linux下的etc是什么意思

Etc是Electronic the collection的缩写&#xff0c;指电子不停车收费系统&#xff0c;是指车辆在通过收费站时通过车上安装的Etc车载系统与收费站之间微波通讯&#xff0c;进行车辆识别&#xff0c;再联合网络和银行进行自动扣费的一种新型收费模式。电子不停车收费系统(英语&a…

《几何与代数导引》例2.7.3

求$yz$面上二次曲线\begin{equation}\begin{cases}\frac{z^2}{c^2}-\frac{y^2}{a^2}1\\x0\\\end{cases}\end{equation}绕$z$轴旋转所得的二次曲面的方程.解&#xff1a;对于二次曲面上的任意点$p(x,y,z)$.都存在相应的二次曲面上的点$(x_0,y_0,z_0)$,使得\begin{equation}(x-x_…

【Leetcode】【Longest Palindromic Substring】【最长回文子串】【C++】

题目&#xff1a;给定字符串&#xff0c;求其最长的回文子串说明&#xff1a;给定字符串长度为1000以内。思路&#xff1a;for循环遍历字符串&#xff0c;求以i为中心的回文子串长度。与最长回文子串长度max_len比较&#xff0c;若大于max_len&#xff0c;则更新max_len。说明&…

万里长征,始于足下——菜鸟程序员的学习总结

最近一直的谈论如何学习&#xff0c;如何做笔记&#xff0c;学习方法是否正确&#xff1f;&#xff08;发现问题——创新的原动力&#xff09;为什么开始系统化学习了&#xff0c;反而暴露许许多多的问题&#xff1f;细想也并不是很多&#xff0c;这都是过去的遗留问题&#xf…

linux命令添加文件权限,linux 的常用命令及文件权限管理

一些常规命令# 切换目录cd /www/app# 显示当前目录绝对路径pwd# tab键可以自动补全路径&#xff0c;命令&#xff1b;及提示选择&#xff0c;自动补全、避免输入错误、tab# 创建文件夹mkdir test# 创建文件touch 123.txt# 创建文件并打开vi 123.txt# 查看文件、more 之后&#…

SSM整合笔记

SSM整合笔记 1&#xff0c;创建maven项目 创建maven项目过程省略 ps&#xff1a;如果创建完maven项目之后项目报错&#xff0c;可能是没有配置Tomcat 2&#xff0c;在pom.xml里面导入相应的jar的依赖 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…

linux jetty 安装目录结构,Linux下Jetty 9安装部署

Jetty简介Jetty是一个开源的servlet容器&#xff0c;它为基于Java的web内容&#xff0c;例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的&#xff0c;它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象&#xff0c;可以迅速为一些独立运行(sta…

[AX]AX2012开发新特性-全文索引

全文索引在索引中识别字符串字段中使用空格隔开的单词&#xff0c;不像普通索引仅仅使用字符串的第一个单词&#xff0c;这样能加快对字符串字段的搜索。AX2012支持每个表有一个且只能有一个全文索引&#xff0c;索引可以包含多个字段&#xff0c;对字段字符串长度没有限制&…

Bootstrap 学习笔记8 下拉菜单滚动监听

代码部分&#xff1a; <nav class"navbar navbar-default"><a href"#" class"navbar-brand">web开发</a><ul class"nav navbar-nav"><li><a href"#html5">HTML5</a></li>&…

怎么在linux的cmd中运行c项目,如何在cmd窗口编译运行c语言程序?

/这个很简单&#xff0c;只需要下载一个C/C编译器&#xff0c;添加一下环境变量&#xff0c;之后就能在cmd窗口中编译运行C语言程序了&#xff0c;下面我简单介绍一下实现过程&#xff0c;主要内容如下&#xff1a;1.下载C/C编译器&#xff0c;这里可以下载MinGW&#xff0c;包…

HTML基础DW使用教程

1、打开文件拓展名&#xff1a; 方法一.打开计算机→组→文件夹和搜索选项→查看&#xff0c;把隐藏拓展名的勾取掉。 方法二.打开计算机→文件夹选项→查看&#xff0c;把隐藏拓展名的勾取掉。 2.桌面新建一个记事本&#xff0c;把.txt后缀改成HTML。 3.右键打开方式&#xff…

eclipse中设置svn的commit快捷键

这样还没有完成&#xff0c;网上大多只有这一步 点Windows>>customize Perspective 勾上svn就可以了.......转载于:https://blog.51cto.com/2820354/963916

查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...

超好用linux系统查询网卡等流量参数的工具&#xff0c;分享给大家&#xff01;&#xff01;&#xff01;工作中大家或许会遇到这类情况&#xff1a;托管服务器流量超出限额&#xff0c;可是突然又不能像windows主机那样通过QQ管家或者360卫士等软件工具那样很直观的测出服务器的…

WPF的转换器中使用Brush应注意问题

1、Brushes用错了命名空间将导致程序无法正确工作。笔者曾写了一个flag值转换为相应的Brush&#xff0c;由于不小心Using了一个错误的命名空间&#xff08;System.Drawing&#xff09;导致Xaml文件界面元素Fill绑定属性总出不来应有的效果。最后费了好大劲才发现&#xff0c;替…

XamarinAndroid组件教程RecylerView适配器设置动画示例

XamarinAndroid组件教程RecylerView适配器设置动画示例 【示例1-3】下面将在RecylerView的子元素进行滚动时&#xff0c;使用适配器动画。具体的操作步骤如下&#xff1a; &#xff08;1&#xff09;创建一个名为RecylerViewAnimatorsAdapter的项目。 &#xff08;2&#xff09…

linux 查询 lib信息,怎么查看linux是否使用 libarchive

1、操作系统级别的共享库和基础的系统工具库比方说libc.so, libz.so, libpthread.so等等&#xff0c;这些系统库会被放在/lib和/usr/lib目录下面&#xff0c;如果是64位操作系统&#xff0c;还会有/lib64和/usr /lib64目录。如果操作系统带有图形界面&#xff0c;那么还会有/us…

oracle oemrpt数据库显现

好多初学者都会找不到oemrpt数据库 oracle中只是做了隐藏 需要在节点上右击选择“刷新所有节点”后 你就可以在数据库中看到oemrpt数据库了转载于:https://blog.51cto.com/wujingfeng/968460

php计算上个月是几月份

PHP计算上个月的时间&#xff0c; $date date("Y-m-d"); $arr explode(-,$date); foreach ($arr as $key>$value){ // echo $value."<br />"; } switch ($arr[1]){case 1:$od_year $arr[0]-1;echo "上一个月的时间为".$od_year.…

linux程序设计知识点整理,笔试面试中C/C++重要知识点整理

4. 类与面向对象编程4.1 类接口与实现的概念&#xff1a;每个类都定义了一个接口(可以不是很确切的理解为类中访问级别为public的函数为接口)和一个实现。接口由使用该类的代码需要执行的操作组成。实现一般包括该类所需要的数据。实现还包括定义该类需要的但又不供一般性使用…

mysql中的blob和text区别

mysql中的blob和text区别 经过查询资料发现 除了blob 还有tinyblob longblob mediumblob 当然text还有tinytext mediumtext longtext 都是最为大的存储 本质区别主要是blob是二进制字符串(字节字符串) text是非二进制字符串(字符字符串) 在TEXT或BLOB列的存储或检索过程中&…