日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Buy Tickets(poj 2828)

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Buy Tickets(poj 2828) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:排隊買票,但是 中途 出現插隊情況,比如 0 123,代表值為123的人 插入到 0 的位置,如果后面 出現 0 456,那么新的 0的位置就是 456,123就變成是 1的位置了

分析:這道題應該從后往前插入,當要插的位置小于左邊的空位數時,就往左邊插,否則往右邊插,并且此刻插的位置要減去左邊的空位數

#include<cstdio> #include<iostream> #define lson l,m,now*2 #define rson m+1,r,now*2+1 #define M 200010 using namespace std; int sum[M*4],ans[M]; struct node {int pos,zh; };node per[M]; void push_up(int now) {sum[now]=sum[now*2]+sum[now*2+1]; } void build(int l,int r,int now) {if(l==r){sum[now]=1;return;}int m=(l+r)/2;build(lson);build(rson);push_up(now); } void change(int p,int v,int l,int r,int now) {if(l==r){ans[l]=v;sum[now]=0;return;}int m=(l+r)/2;if(p<sum[now*2]) change(p,v,lson);else change(p-sum[now*2],v,rson);push_up(now); } int main() {int n;while(~scanf("%d",&n)){build(0,n-1,1);for(int i=0;i<n;i++)scanf("%d%d",&per[i].pos,&per[i].zh);for(int i=n-1;i>=0;i--)change(per[i].pos,per[i].zh,0,n-1,1);for(int i=0;i<n;i++)printf("%d ",ans[i]);printf("\n");}return 0; } View Code

?

轉載于:https://www.cnblogs.com/harden/p/5624824.html

總結

以上是生活随笔為你收集整理的Buy Tickets(poj 2828)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。