時間之主
timer.c/cpp/pas
timeraugust掌握著無盡時間裡不同時間軸的平行世界.每乙個瞬間都會有
新的世界被創造出來,其中一些世界被創造出來的根源就是已有生靈的信仰.無論
是屍魂界幻想鄉數碼世界…只要有足夠的信仰,世界之心就會抓取這些信仰並用
來構建成新的世界.不同世界有不同編號和不同信仰值.
現在 timeraugust想知道對世界 1..n,有信仰值 a
1 ..a
n ,其中那些i < j < … < k,ai > aj > … > ak的世界序列的數量.很不幸,你被他選中了.現在你需要在2s內回答他的問題(對能掌控時間的 timer 來說 2 秒鐘已經很長很長了),否則就要被丟到時間裂縫裡變成乙個永遠靜止的藝術品了.
輸入 input
第一行兩個數 n,k,n 表示世界數目,k 說明你要找 k 元組數目.
接下來 n 行每行乙個數,表示每個世界的信仰值.(不超過 int範圍)
輸出 output
輸出那個數目.(出題人保證答案炸 int64 的資料被丟掉了 www)
資料範圍 hint
對 100%的資料,1≤n≤100000,1≤k≤10.
對 30%的資料,1≤n≤20.(由於出題人非常隨(lan)性(duo)難以保證暴力能拿到全部暴力分…)
sample input sample output
4 3 4
10 8 3 1
這顯然是一道水題,不過出題人的標算非常神。原來樹狀陣列還可以反著用,求字尾和!就是把修改的路線和求和的路線反一下,就相當於是把標記留在了上面,然後詢問的時候再去撿標記。
#include
#include
#include
#include
using
namespace
std;
#define mod 1000000007
#include
void in(int &x)
int f[15][100005];
int hash[100005],a[100005],htot;
int query(int k,int x)
int update(int k,int x,int a)
for(i=1;i<=n;++i)in(a[i]),hash[i]=a[i];
sort(hash+1,hash+n+1);
htot=unique(hash+1,hash+n+1)-hash;
for(i=n;i;--i)a[i]=lower_bound(hash+1,hash+htot,a[i])-hash;
for(i=n;i;--i)
printf("%d\n",query(k,htot-1));
}
Block Voting 解題報告
這道題做的有點狼狽,效率不高,差一點就tle的ac了。看status裡的,ac的時間大多數都是0ms的。肯定有乙個更有效率的演算法的。下面說下我的狼狽演算法。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1223 問題描述 求每個party的權值。第i...
Safebreaker 解題報告
又是吉林大學一道acm題目,題目很簡單,直接暴力解決。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1718 問題描述 對乙個給定數0000 9999 根據一系列猜測,判斷這個數是否存在,存在的話,是否唯一 例如 3321,給定數 作出猜測,1223 ...
路由 解題報告
路由 問題描述 有乙個tcp ip網路 每台計算機都有乙個或多個網路介面。每個介面根據它的ip位址和子網掩碼來識別 即兩個4位元組的數,兩個字 節之間有乙個 號.子網掩碼有乙個二進位制表示法 有k個 1 然 後是 m 個 0 k m 8 4 32 如 212.220.35.77 是乙個 ip 地 址...