uva 11991 Easy Problem from Rujia Liu? Data Structure

离散化与动态数组解决UVA11991易题
本文介绍如何通过离散化和动态数组解决UVA11991易题,该题要求从数组中查询特定位置的元素。文章详细解释了离散化的作用、如何使用动态数组进行优化,以及实现过程中的关键步骤。
// uva 11991 Easy Problem from Rujia Liu?
// 给一个包含n个数的数组,需要回答若干个询问,每次询问两个整数
// k和v,输出从左到右第k个v的下标
//
// 本题因为n比较大,所以直接开二维数组是不现实的
// 如果直接用vector的话,也是会有大量的浪费
// 所以可以先离散化一下,找到一共有多少个不同的数
// 再用vector动态数组就可以搞定了
//
// 看着书上的map写的挺精彩的,我就习用了下来
//
// 非常精彩,继续练吧。。。

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#define ceil(a,b) (((a)+(b)-1)/(b))
#define endl '\n'
#define gcd __gcd
#define highBit(x) (1ULL<<(63-__builtin_clzll(x)))
#define popCount __builtin_popcountll
typedef long long ll;
using namespace std;
const int MOD = 1000000007;
const long double PI = acos(-1.L);

template<class T> inline T lcm(const T& a, const T& b) { return a/gcd(a, b)*b; }
template<class T> inline T lowBit(const T& x) { return x&-x; }
template<class T> inline T maximize(T& a, const T& b) { return a=a<b?b:a; }
template<class T> inline T minimize(T& a, const T& b) { return a=a<b?a:b; }

map<int,vector<int> > mp;

int n,m;

void init(){
	mp.clear();
	int x;
	for (int i=0;i<n;i++){
		scanf("%d",&x);
		if (!mp.count(x))
			mp[x] = vector<int> ();
		mp[x].push_back(i+1);
	}
	for (int i=0;i<m;i++){
		int v,k;
		scanf("%d%d",&k,&v);
		if (!mp.count(v) || mp[v].size()<k){
			puts("0");
		}else
			printf("%d\n",mp[v][k-1]);
	}
}

int main() {
//	freopen("G:\\Code\\1.txt","r",stdin);
	while(scanf("%d%d",&n,&m)!=EOF){
		init();
		//solve();
	}
	return 0;
}

请帮我写一份c++代码,解决一下问题,要求符合输入输出样本There are n people (excluding myself) in my 30th birthday party. They sing the traditional “happy birthday” song: Happy birthday to you! Happy birthday to you! Happy birthday to Rujia! Happy birthday to you!!! Since I love music, I want to hear something more interesting, not that everyone sings together. Ah yes, I want one person to sing one word! For example, there are three people: Mom, Dad, Girlfriend, I’d like them to sing like this: Mom: Happy Dad: birthday Girlfriend: to Mom: you Dad: Happy Girlfriend: birthday Mom: to Dad: you Girlfriend: Happy Mom: birthday Dad: to Girlfriend: Rujia Mom: Happy Dad: birthday Girlfriend: to Mom: you Very nice, right? What if there are more than 16 people? That’s easy: repeat the song until everyone has sung at least once :) Please, don’t stop in the middle of the song.Input There is only one test case. The first line contains a single integer n (1 ≤ n ≤ 100). Then each of the next n lines contains a capitalized name (i.e. one upper-case letter followed by zero or more lowercase letters). Each name contains at most 100 characters and do not have whitespace characters inside. Output Output the song, formatted as above. Sample Input 3 Mom Dad Girlfriend Sample Output Mom: Happy Dad: birthday Girlfriend: to Mom: you Dad: Happy Girlfriend: birthday Mom: to Dad: you Girlfriend: Happy Mom: birthday Dad: to Girlfriend: Rujia Mom: Happy Dad: birthday Girlfriend: to Mom: you
最新发布
12-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值