UVA 11991 Easy Problem from Rujia Liu? 简单STL

  题目链接: UVA, 你懂的

  题目描述: 给出一串数, 求第几次出现的数字几?

  解题思路: 北交集训STL水题

  代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;

const int MAXN = 1e5 + 7;
map<int, int> cnt;
map<pair<int, int>, int> M;
int arr[MAXN];

int main() {
    int n, m;
    while( scanf( "%d%d", &n, &m ) != EOF ) {
        cnt.clear();
        M.clear();
        memset(arr, 0, sizeof(arr));
        for( int i = 1; i <= n; i++ ) {
            scanf( "%d", &arr[i]);
            if( cnt.count(arr[i]) == 0 ) {
                cnt.insert(make_pair(arr[i], 1));
                M.insert(make_pair(make_pair(1, arr[i]), i));
            }
            else {
                cnt[arr[i]]++;
                M.insert(make_pair(make_pair(cnt[arr[i]], arr[i]), i));
            }
        }
        for( int i = 1; i <= m; i++ ) {
            int times, num;
            scanf( "%d%d", &times, &num );
            printf( "%d\n", M[make_pair(times, num)]);
        }
    }
    return 0;
}

  思考: 没啥的, 继续补题吧

时间: 2024-10-02 00:24:39

UVA 11991 Easy Problem from Rujia Liu? 简单STL的相关文章

UVA 11991 Easy Problem from Rujia Liu?【STL】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142 题意: 给一个长度n的序列,有m询问,每个询问会问第k个出现的数字的下标是多少 用map记录 代码: #include <stdio.h> #include <iostream> #include <algorithm> #includ

uva 11991 Easy Problem from Rujia Liu? Data Structure

// uva 11991 Easy Problem from Rujia Liu? // 给一个包含n个数的数组,需要回答若干个询问,每次询问两个整数 // k和v,输出从左到右第k个v的下标 // // 本题因为n比较大,所以直接开二维数组是不现实的 // 如果直接用vector的话,也是会有大量的浪费 // 所以可以先离散化一下,找到一共有多少个不同的数 // 再用vector动态数组就可以搞定了 // // 看着书上的map写的挺精彩的,我就习用了下来 // // 非常精彩,继续练吧...

uva 11991 - Easy Problem from Rujia Liu?(STL)

题目链接:uva 11991 - Easy Problem from Rujia Liu? 题目大意:给出一个包含n个整数的数组,你需要回答若干询问,每次询问两个整数k和v,输出从左到右第k个v的下标 解题思路:用map映射一个vector,对应即为map<int>即为一个可变长的数组,读取数组的时候将对应值放入即可. #include <cstdio> #include <cstring> #include <map> #include <vecto

[UVA] 11991 - Easy Problem from Rujia Liu? [STL应用]

11991 - Easy Problem from Rujia Liu? Time limit: 1.000 seconds Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi'an 2006, Beijing 2007 and Wuhan 2009, or UVa OJ con

(DS 《算法入门经典》)UVA 11991 Easy Problem from Rujia Liu?(求第k个v出现的索引)

题目大意: 求第k个v出现的索引 解题思路: 如果能构造出一个数据结构,使得data[v][k]就是第k个v出现的索引值即可求解.data[v]表示数v出现的索引数组, data[v][k]表示第k个v出现的索引. Problem E Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi'an 200

uva 11991 Easy Problem from Rujia Liu? vector+map

水题 学习一下数据的存储方法. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<stack> 5 #include<queue> 6 #include<vector> 7 #include<map> 8 using namespace std; 9 int n,m; 10 map<int,vector<int>

uva 11991 - Easy Problem from Rujia Liu?

题意: 给定一个n个整数的数组,进行多次查询,每次查询输出第k个v的位置. 题解: 定义map<int,vector<int> >mm;那么mm[i][j]表示的就是第j+1个i的值的位置.为什么?我们将每个v映射成map中的一个键,用变长数组vector保存v的所有位置:那么mm[v]对应的就是vector,就是所有v的位置,然后查询vector中第k个元素即可. 1 #include<cstdio> 2 #include<map> 3 #include&

11991 - Easy Problem from Rujia Liu?(的基础数据结构)

UVA 11991 - Easy Problem from Rujia Liu? 题目链接 题意:给一个长度n的序列,有m询问,每一个询问会问第k个出现的数字的下标是多少 思路:用map和vector搞,map[i][j]直接保存的就是数字i第j个出现,每次直接输出就可以 代码: #include <cstdio> #include <cstring> #include <vector> #include <map> using namespace std;

11991 - Easy Problem from Rujia Liu?(基础数据结构)

UVA 11991 - Easy Problem from Rujia Liu? 题目链接 题意:给一个长度n的序列,有m询问,每个询问会问第k个出现的数字的下标是多少 思路:用map和vector搞,map[i][j]直接保存的就是数字i第j个出现,每次直接输出即可 代码: #include <cstdio> #include <cstring> #include <vector> #include <map> using namespace std; i