2013BJOI Day1 第二題 彩色球

2021-07-11 01:24:19 字數 1125 閱讀 7798

問題描述

有n個球,序號分別為1到n,每個球有乙個顏色,顏色的序號為1到m。

你需要處理一類詢問:給定乙個區間左右邊界(包含),求這個區間內有多少種不同顏色的球。

輸入格式

第一行,球的個數n和顏色的範圍m

接下來n行,每行乙個數,第i行的數表示第i個球的顏色。

接下來一行,為詢問的個數q

接下來q行,每行兩個數,為區間的左右邊界l和r,l<=r。

輸出格式

q行,每行乙個數,為該區間內的顏色種類數。

樣例輸入

10 4

1 3

2 2

4 3

1 3

2 4

6 1 5

2 6

4 4

6 8

8 10

7 10

樣例輸出

4 3

1 2 3 4

資料規模和約定

對於100%的資料,n<=200000, q<=200000, m<=n

對於50%的資料,m<=30

提示輸入資料規模較大。

看到這種區間查詢的第一想法就是分塊,之後發現用資料結構貌似並不好做,又因為是這種區間查詢,所以就會想到莫隊演算法。

把q個查詢先按l排序,之後分成n√

塊,每塊內按r排序,之後直接暴力維護得到答案即可。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

ifstream cin("colorball.in");

ofstream cout("colorball.out");

int n, m;

int c[200050];

int col[200050];

int cnt;

class op ;

int q;

op a[200050];

int ans[200050];

void readin() {

2013藍橋杯第二題 馬虎的算式

小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是 36 x 495 他卻給抄成了 396 x 45 但結果卻很戲劇性,他的答案竟然是對的!因為 36 495 396 45 17820 類似這樣的巧合情況可能還有很多,比如 27 594 297 54 假設 a b ...

第二期訓練題第1題

problem description 在乙個國家僅有1分,2分,3分硬幣,將錢n兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。input 每行只有乙個正整數n,n小於32768。output 對應每個輸入,輸出兌換方法數。sample input 2934 12553 sample ...

第二期訓練題1

問題分析 該題只需按照題目要求輸入資料,並將每組資料的第乙個作為最小值,再將這個最小值逐一與輸入的資料比較大小,如果輸入的資料小於最小值,則將輸入的資料代替最小值,最後得到這組資料的最小值。ac通過的 如下 includeusing namespace std int main if m 0 cou...