CodeForces - 1066C Books Queries(思维)
生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 1066C Books Queries(思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出n次操作,每次操作分為以下三種:(假設現在有一個空的隊列)
對于每個查詢,輸出相應的答案
題目分析:這個題目一開始我想從右端維護一個map,再從左端維護一個map,但是在查詢的時候遇到了一個小問題就是加入x是從左邊插入的,但是從右邊移除是最優解,這個時候不能輸出正確答案,想了半天沒有什么思路,去網上看了一下題解才發現,因為答案要我們求的是相對位置,我們只需要動態維護兩個指針l和r表示區間長度,然后用一個map維護區間內的位置即可,每次插入操作相應的賦值,并且擴展區間就可以了。。看過代碼之后真的覺得自己的思維總是差點火候,不多說了,直接看代碼吧
代碼:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;unordered_map<int,int>mp;int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n;scanf("%d",&n);int l=0,r=-1;//初始的區間是[0,-1],表示的是一個元素都不存在的區間while(n--){char s[5];int x;scanf("%s%d",s,&x);if(s[0]=='L')mp[x]=--l;else if(s[0]=='R')mp[x]=++r;elseprintf("%d\n",min(r-mp[x],mp[x]-l));}return 0; }?
總結
以上是生活随笔為你收集整理的CodeForces - 1066C Books Queries(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中石油训练赛 - 独居(二分水题)
- 下一篇: 蓝桥杯 - 翻硬币(贪心)