GalaxyOJ 945 逆向思維 去重優化

2021-08-09 18:59:34 字數 1826 閱讀 1314

problem 945: 數列的秘密

time limit: 1000 ms memory limit: 262144 kb

problem description

wsw最近在研究數列,他需要知道在他所研究的數列中,最大的數是多少(max),最小的數是多少(min),最大的數的最小的數次冪是多少(max^min),所有數的乘積是多少。

要知道,這樣的問題是肯定難不倒wsw的。但是,最近wsw突發奇想,想要研究下這個數列的更深層的性質,所以他決定不斷的從這個數列中刪去一些數,每次刪除後都研究下當前數列。由於數列項數很大,這給wsw帶來了很大的麻煩,於是wsw請你幫他寫乙個程式,來完成下列操作。

1. d x:表示從數列中刪除x,保證原數列中一定會有x。(注意這裡是如果數列中有多個x,那麼就要先把x全部刪掉,如果某個x在d的時候以前已經被d過了,請自動忽略這一次的d)

2. b:輸出當前數列中的最大數,保證數列不為空。

3. s:輸出當前數列中的最小數,保證數列不為空。

4. m:輸出max^min 除以317847191 的餘數,其中max 為當前數列中的最大數,min 為當前數列中的最小數,保證數列不為空。

5. t:輸出數列中所有數的乘積除以317847191 的餘數,保證數列不為空。

input

共m+2 行

第1 行:兩個正整數n,m,n 表示初始數列的長度,m 表示運算元。

第2 行:n 個正整數,第i 個數表示初始數列中的第i 項ai,數列中有可能會有相同的數。

第3~m+2 行:每行表示乙個操作,具體格式參見題目描述。

對於所有資料n<=1,000,000, m<=1,000,000, ai<=100,000,000

output

每行乙個數,分別表示每個操作的結果(d x 操作不需要有輸出)。

sample input

3 6

2 6 9

m d 9

b s m t

sample output

81

6 2

36 12

#include 

#include

#define n 1000005

#define ha 317847191

#define x q[i].x

typedef long long ll;

using namespace std;

struct que q[n];

ll i,n,m,k,a[n],s[n],f[n],num,ans=1,min=2147483647,max=-2147483647;

char s[10];

ll ksm(ll xx,ll yy)

int main()

}for (i=1; i<=num; i++) if (!f[i]) ans=(ans*ksm(a[i],s[i]))%ha,min=min(min,a[i]),max=max(max,a[i]);

for (i=m; i; i--)

if (q[i].q=='b')

if (q[i].q=='s')

if (q[i].q=='m')

if (q[i].q=='t')

}for (ll i=1; i<=m; i++) if (q[i].q!='d') printf("%lld\n",q[i].y);

}

賭神(逆向思維)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 買定離手,買定離手!到底誰能捧盃本次新生賽?億電競的投資人 億大佬 向你介紹遊戲規則 你可以參與數次競猜,每次競猜都有兩個待選隊伍a和b 當然不是競猜新生賽的隊員哈 你...

逆向思維(域外箴言)

因閉口不言而讓別人以為你是傻瓜,比因為張嘴說話而證實別人的猜想,要明智得多。事先如果沒有充分的準備,我無法做好即興演講。一定要聽父母的話 當他們在場的時候。防止受 的好辦法很多,其中最保險的方法是做個膽小怕事的人。行善是偉大的 勸人行善更偉大,而且做起來也更容易。我從不讓學校生活干擾我學習真正的知識...

Flower 規律 逆向思維)

flower 傳送門 題解 逆向思維 規律 因為每次剪n 1,所以逆向就是控制n 1朵不變,每次增高1朵,直到所有等高,即所有的高度都等於最高的那一朵,記錄增高的次數為sum,反過來就是最高的那個減少sum,如果減少sum後小於1則不成立,大於等於1,則需要減少sum次。sum 每朵花與最高的差的和...