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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

bzoj3141: [Hnoi2013]旅行

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj3141: [Hnoi2013]旅行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Input

第 一行為兩個空格隔開的正整數n, m,表示旅行的城市數與旅行所花的月數。接下來n行,其中第?i行包含兩個空格隔開的整數Ai和Bi,Ai表示他第i個去的城市編號。Bi為0或1;如果 Bi=0則表示城市Ai沒有小L想去的景點,如果Bi=1則表示城市Ai有小L想去的景點,
Ai兩兩不同且有1<=Ai<=N,即{Ai}為1,2....N的一個排列。
例如{2,1,3,4...N}
N<=500000,M<=200000

Output

t僅包括一行,包含m個空格隔開的正整數X1,X2...Xm,t僅包括一行,包含m個空格隔開的正整數X1,X2...Xm,為給小L安排的旅行計劃對應的路線。為給小L安排的旅行計劃對應的路線。

Sample Input

8 3
2 0
3 1
4 1
1 0
5 0
6 1
7 1
8 0

Sample Output

1 6 8

HINT

1個月得到2點快樂值與2點疲勞值,第2個月得到1點快樂值與1點疲勞值,第3 個月得到1點快樂值與1點疲勞值。3個月中疲勞值與快樂值差的最大值為0,達到所有方案最小值。

?

可行方案有:

?

1 ?6 8

?

3 ?6 8

?

3 ?1 8


其中1 6 8字典序最小。

?

題解:

數組b[i]表示城市a[i]是否為有小L想去的景點,1表示有,-1表示沒有

記sum[i]=b[i+1]+b[i+2]+...+b[n],S=sum[0],最大值最小為d,則

if S==0

  if sum[i]==0 的個數 >= m 則將這些等于0的數做一遍單調隊列

  else d=1

else d=ceil(abs(S)/m)

證明見http://cxjyxx.me/?p=329

然后就是如何求字典序最小

我們每次要找到一個 能使后面的數仍然有解的 最小的一個數作為結尾

設這個新區間是第i個區間,結束點為k

首先這個新區間要合法,則abs(S-sum[k])/(m-i)<=d

然后要保證后面要有解,則ceil(abs(sum[k])/(m-i))<=d

然后用單調隊列維護每種sum值的最小值

具體見代碼

code:

1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #define maxn 500005 7 #define base maxn 8 using namespace std; 9 char ch; 10 bool ok; 11 void read(int &x){ 12 for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; 13 for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); 14 if (ok) x=-x; 15 } 16 struct Point{int v,id;}; 17 int cnt; 18 struct node{ 19 Point p; 20 int pre,next; 21 }T[maxn<<1]; 22 int newnode(Point p,int pre,int next){T[++cnt]=(node){p,pre,next};return cnt;} 23 struct queue{ 24 int siz,head,tail; 25 bool empty(){return !siz;} 26 void push_front(Point p){ 27 if (!siz) head=tail=newnode(p,0,0); 28 else T[head].pre=newnode(p,0,head),head=T[head].pre; 29 ++siz; 30 } 31 void push_back(Point p){ 32 if (!siz) head=tail=newnode(p,0,0); 33 else T[tail].next=newnode(p,tail,0),tail=T[tail].next; 34 ++siz; 35 } 36 void pop_front(){siz--,head=T[head].next;} 37 void pop_back(){siz--,tail=T[tail].pre;} 38 Point front(){return T[head].p;} 39 Point back(){return T[tail].p;} 40 }list[maxn<<1]; 41 int tot,now[maxn<<1],pre[maxn<<1]; 42 Point point[maxn<<1]; 43 int n,m,last,val[maxn],sum[maxn],rest[maxn]; 44 void add(int u,Point p){pre[++tot]=now[u],now[u]=tot,point[tot]=p;} 45 int calc(){ 46 int ans=0; 47 for (int i=n;i>=1;i--){ 48 if (!sum[i]) ans++,rest[i]=1; 49 rest[i]+=rest[i+1]; 50 } 51 if (ans>=m) return 0; else return 1; 52 } 53 void push(int u,Point p){ 54 while (!list[u].empty()&&p.v<list[u].back().v) list[u].pop_back(); 55 list[u].push_back(p); 56 } 57 Point calc(int u,int lim){ 58 for (int p=now[u];p&&point[p].id<=lim;p=pre[p]) push(u,point[p]),now[u]=p; 59 while (!list[u].empty()&&list[u].front().id<=last) list[u].pop_front(); 60 return list[u].empty()?(Point){maxn,maxn}:list[u].front(); 61 } 62 Point min(Point a,Point b){return a.v<b.v?a:b;} 63 int main(){ 64 read(n),read(m); 65 for (int i=1;i<=n;i++) read(val[i]),read(sum[i-1]),sum[i-1]=(sum[i-1])?1:-1; 66 for (int i=n-1;i>=0;i--) sum[i]+=sum[i+1]; 67 for (int i=n;i>=1;i--) add(sum[i]+base,(Point){val[i],i}); 68 int S=sum[0],d=(S!=0)?(int)ceil(1.0*abs(S)/(1.0*m)):calc(); 69 if (d){ 70 for (int i=1;i<m;i++){ 71 Point ans=(Point){maxn,maxn}; 72 for (int j=S-d+base;j<=S+d+base;j++){ 73 if (ceil(abs(1.0*j-base)/(1.0*m-i))<=d) 74 ans=min(ans,calc(j,n-(m-i))); 75 } 76 printf("%d ",ans.v); 77 last=ans.id,S=sum[last]; 78 } 79 printf("%d\n",val[n]); 80 } 81 else{ 82 for (int i=1,p=now[base];i<m;i++){ 83 for (;p&&rest[point[p].id]-1>=m-i;p=pre[p]) push(base,point[p]); 84 printf("%d ",list[base].front().v); 85 list[base].pop_front(); 86 } 87 printf("%d\n",val[n]); 88 } 89 return 0; 90 }

?

轉載于:https://www.cnblogs.com/chenyushuo/p/5090137.html

總結

以上是生活随笔為你收集整理的bzoj3141: [Hnoi2013]旅行的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: jizz性欧美17| 亚洲欧美成人综合 | 日韩一级片av | 青青操av在线 | 亚洲一区二区福利 | 青青草手机在线 | av在线视| 直接看的毛片 | 一本一本久久a久久精品综合麻豆 | 强行无套内谢大学生初次 | 欧洲女女同性videoso | 在线免费观看欧美大片 | 伊人影院综合 | 日本高清免费视频 | 国产黄色大片免费看 | 国产区二区 | 午夜精品久久久久久久久久久 | 黄色一级视频网站 | www.久久视频 | 欧美黑人三级 | 亚洲欧美综合自拍 | 日韩精品视频中文字幕 | 大j8黑人w巨大888a片 | 国产tv在线观看 | 国产不卡视频在线播放 | 欧美精品第1页 | 3d动漫精品啪啪一区二区三区免费 | 把高贵美妇调教成玩物 | 欧美日韩性生活视频 | 日韩经典在线观看 | 黄色性生活一级片 | 亚洲手机在线 | av网站在线观看不卡 | 中文字幕+乱码+中文 | 天天操天天干天天舔 | 欧美伦乱 | 国产区一区二区 | 亚洲成人第一页 | 玉米地疯狂的吸允她的奶视频 | 日韩一级二级视频 | 日本学生初尝黑人巨免费视频 | 黄色片特级 | 天天爱天天射 | 一本色道久久综合狠狠躁的推荐 | jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 老外黄色一级片 | 欧美成在线 | 亚洲av综合永久无码精品天堂 | 欧美精品1区 | 天天干干天天 | 亚洲欧美日韩精品永久在线 | www.男人的天堂 | 久久久久久久久久国产精品 | 精品国产一区二区三区无码 | 成人激情视频在线播放 | 日本视频网址 | 亚洲第一男人天堂 | 欧美日韩一区二区电影 | 日本特级黄色录像 | 中文字幕超清在线观看 | 午夜tv | 久久久夜色精品亚洲 | 超碰97av在线 | 成人性视频在线 | 在线亚洲欧美 | 亚洲女同一区二区 | 超碰人人爱人人 | 亚洲视频中文字幕在线观看 | 色妇网| 成人久久一区二区 | 69视频在线免费观看 | 91久久国语露脸精品国产高跟 | 色窝窝无码一区二区三区成人网站 | 成人综合精品 | 欧美午夜理伦三级在线观看 | 色一情一区二区三区 | 国产一二在线观看 | 国产精品欧美综合亚洲 | 国产精品一区二区久久毛片 | 欧美一区二区三区四区在线观看 | 麻豆91精品 | 久久天天躁狠狠躁夜夜av | 99成人在线 | 国产精品网站在线观看 | 久久春色| 精品久久久无码中文字幕边打电话 | 欧美精品在线播放 | 制服丝袜在线第一页 | 巨乳女教师的诱惑 | 亚洲精品乱码久久久久久国产主播 | 精品国产自 | 欧美日韩一级二级 | 911精品 | 中国极品少妇xxxx | 天天狠天天插 | 欧美超逼视频 | 欧美黑人一级爽快片淫片高清 | 91天堂素人| 女人18毛片水真多 |