范围查询
描述
数轴上有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;
}
}