description
假設一開始,荷官拿出了一副新牌,這副牌有n張不同的牌,編號依次為1到n。由於是新牌,所以牌是按照順序排好的,從牌庫頂開始,依次為1,input2,……直到n,n號牌在牌庫底。為了發完所有的牌,荷官會進行n次發牌操作,在第i次發牌之前,他會連續進行r_i次銷牌操作,r_i由輸入給定。請問最後玩家拿到這副牌的順序是什麼樣的?
舉個例子,假設n = 4,則一開始的時候,牌庫中牌的構成順序為。
假設r1=2,則荷官應該連銷兩次牌,將1和2放入牌庫底,再將3發給玩家。目前牌庫中的牌順序為。
假設r2=0,荷官不需要銷牌,直接將4發給玩家,目前牌庫中的牌順序為。
假設r3=3,則荷官依次銷去了1, 2, 1,再將2發給了玩家。目前牌庫僅剩下一張牌1。
假設r4=2,荷官在重複銷去兩次1之後,還是將1發給了玩家,這是因為1是牌庫中唯一的一張牌。
第1行,乙個整數n,表示牌的數量。第2行到第n + 1行,在第i + 1行,有乙個整數r_i, 0≤r_i < noutput
第1行到第n行:第i行只有乙個整數,表示玩家收到的第i張牌的編號。sample input sample output hint
n<=70萬題解
學習樹狀陣列找第k小的了參考了這篇blog
其實就相當於乙個不斷逼近的過程
對於這道題,你維護乙個當前牌的位置,然後找一下第k小的就ok了
#include
#include
#include
#include
#include
using
namespace
std;
bool v[710000];
int n,pos,now;
int s[710000];
int lowbit(int x)
void change(int x,int c)}
int r;
int fd(int p)
int main()
*/scanf("%d",&r);
now=(now+r)%i;if(now==0)now+=i;
int tmp=fd(now);
printf("%d\n",tmp);
}return
0;}
bzoj4415 Shoi2013 發牌 線段樹
相當於找區間第k個數,同時支援刪點 這個題的線段樹操作和noid1t1有點像。所以調了半天。注意對size取模,注意查詢區間第k的時候的特判 碼 include includeusing namespace std define zuo o 1,l,mid define you o 1 1,mid ...
bzoj1246(樹狀陣列)
樹狀陣列的靈活運用,維護的是最大值,因為整個陣列就是乙個字首最大值,所以可以用實現,求乙個字首最大值,和更新pos之後的最大值。很好的運用,多回顧思考 include include include include includeusing namespace std const int n 200...
bzoj 2762 樹狀陣列
題意 給出一些形如 ax b 1 新加入乙個不等式 2 刪除乙個不等式 3 詢問當x k時滿足的不等式的個數 對於每乙個不等式,通過變形就可以得到使它成立的x的範圍 那麼就變成區間修改,單點查詢,樹狀陣列維護就好 注意 1 討論a 0 a 0 a 0的情況 2 由於k有非正數,所以要加上10 6 1...