范围查询

本文深入探讨了一种在数轴上进行范围查询的算法,详细解释了如何计算在给定闭区间内点的数量。通过解析输入输出格式,给出了具体的样例,并讨论了算法的时间和空间复杂度限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

范围查询

描述

数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。

输入

第一行包括两个整数:点的总数n,查询的次数m。

第二行包含n个数,为各个点的坐标。

以下m行,各包含两个整数:查询区间的左、右边界a和b。

输出

对每次查询,输出落在闭区间[a, b]内点的个数。

样例

见英文题面

限制

0 ≤ n, m ≤ 5×105

对于每次查询的区间[a, b],都有a ≤ b

各点的坐标互异

各点的坐标、查询区间的边界a、b,均为不超过10^7的非负整数

时间:2 sec

内存:256 MB

#include<stdio.h>
#include<iostream>
#include <vector>
#include<string>
using namespace std;

int main() {

static vector<char> sum[5];
	
int count = 0;
	char temp1;
	cout << "*********初始珠子\n";

	sum->resize(500);
	char* pC = sum->data();
	cin >> pC;

	//for (int i = 0; i < 5; i++) {	//初始珠子
	//	cin >> temp1;
	//	sum->push_back(temp1);
	//	count++;
	//}

	cout << "*********加珠子次数:\n";
	int n;
	cin >> n;
	int* a = new int[n];//位序
	char * b = new char[n];//插入的竹子的颜色
	int temp;
	vector<char>::iterator it;
	//it = sum->begin();
	vector<char>::iterator del;
	//del = sum->begin();
	vector<char>::iterator m;
	vector<char>::iterator jian;

	for (int i = 0; i < n; i++) {

		cout << "*********插入珠子\n";
		cin >> a[i] >> b[i];	//插入珠子
		//temp = a[i];
		//vector<char> temp2;
		//vector<char>::iterator temp2;
		//temp2.push_back(b[i]);
		//temp2 = b[i];
		//sum->insert(temp, temp2);
		//sum.insert(sum->begin(), 'a');
		vector<char>::iterator it;
		it = sum->begin();
		sum->insert(it + a[i], b[i]);

		//sum->push_back(b[i]);s

		cout << "*********检测重复\n";
		for (jian = sum->begin(); jian != sum->end()-2; jian++) {		//检测重复
			if (sum->size() >= 3) {
				cout << *jian << *(jian + 1) << *(jian + 2) << "*********开始检测...\n";
				if (*jian == *(jian + 1)) {
					if (*(jian + 2) == *(jian + 1)) {
						del = sum->begin();
						sum->erase(jian, jian + 3);
						cout << "*********删除了三个数\n";
						/*count = count - 3;*/
						jian = sum->begin();
					}
					else {
						cout << "********本次仅仅两个字母相同\n";
					}
				}
				else {
					cout << "********本次没有字符相同\n";
				}
			}
			else if (sum->size() == 0) {
				cout << "-";
			}
			else {
				break;
			}
			
		}

		cout << "*********输出剩下内容\n";
		for ( m = sum->begin(); m != sum->end(); m++) {		//输出内容
		/*	it = sum[i];
			a = sum[i];*/
			std::cout << *m;
			//printf("%c", sum[i]);
		}
		cout << endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值