首页 > 其他 > 详细

Codeforces Round #515 (Div. 3) C. Books Queries (模拟)

时间:2020-07-11 23:40:06      阅读:75      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:有一个一维的书架,\(L\)表示在最左端放一本书,\(R\)表示在最右端放一本书,\(?\)表示从左数或从右数,最少数多少次才能得到要找的书.

  • 题解:我们开一个稍微大一点的数组,从它的中间开始模拟,\(L\)就--\(l\)放进去,\(R\)就++\(r\)放进去,然后每次某一本书的最新位置,因为后放的肯定里最左侧或最右侧最近,然后两端求差弄个最小值就行.

  • 代码:

    int q;
    char c;
    int idx;
    int ans;
    int mp[2*N],now[2*N];
    
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
      	cin>>q;
      	int l=N+1,r=N;
      	 for(int i=1;i<=q;++i){
      	 	cin>>c>>idx;
      	 	if(c==‘L‘){
      	 		mp[--l]=idx;
      	 		now[idx]=l;
      	 	}
      	 	else if(c==‘R‘){
      	 		mp[++r]=idx;
      	 		now[idx]=r;
      	 	}
      	 	else{
      	 		ans=min(now[idx]-l,r-now[idx]);
      	 		cout<<ans<<endl;
      	    }
      	 }
        return 0;
    }
    

Codeforces Round #515 (Div. 3) C. Books Queries (模拟)

原文:https://www.cnblogs.com/lr599909928/p/13285879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!