Submission #683004

#TimeUsernameProblemLanguageResultExecution timeMemory
683004Ahmed57Queue (CEOI06_queue)C++14
100 / 100
281 ms19672 KiB
#include <bits/stdc++.h> using namespace std; #define int long long map<int,int> nex,pre; int next(int x){ if(nex.count(x))return nex[x]; return x+1; }int prev(int x){ if(pre.count(x))return pre[x]; return x-1; } int inf = 1e9; signed main(){ int val = 1; int n; cin>>n; while(n--){ int a,b; cin>>a>>b; if(a==val){ val=next(a); } if(b==val){ val= a; } nex[prev(a)] = next(a); pre[next(a)] = prev(a); int la = prev(b); nex[la] = a; pre[a] = la; nex[a] = b; pre[b] = a; } nex[inf] = inf+1; vector<pair<int,int>> v; if(val==1&&nex[1]==0){ nex[1] = 2; } while(1){ if(val==inf)break; if(!nex.count(val)){ auto pp = nex.lower_bound(val+1); long long ne = (*pp).first; v.push_back({val,ne-val}); val = ne; continue; }else{ long long ne= nex[val]; v.push_back({val,1}); val= ne; continue; } } int q;cin>>q; set<pair<long long,long long>> L,R; for(int i = 0;i<q;i++){ char c;cin>>c; long long x;cin>>x; if(c=='L'){ L.insert({x,i}); }else{ R.insert({x,i}); } } v.push_back({inf,1}); long long ans[q] = {0}; int st = 0, cur = 1; for(auto i:L){ while(st<v.size()-1&&cur+v[st].second<=i.first)cur+=v[st].second,st++; ans[i.second] = v[st].first+(i.first-cur); } long long sum = 1; for(int i = 0;i<v.size();i++){ if(v[i].second==1){ pair<int,int> p = {v[i].first,0}; auto it = R.lower_bound(p); while(it!=R.end()&&(*it).first==v[i].first){ ans[(*it).second] = sum; it++; } }else{ int l = v[i].first , r = v[i].second+v[i].first-1; pair<int,int> p = {l,0}; auto it = R.lower_bound(p); while(it!=R.end()&&(*it).first<=r){ ans[(*it).second] = sum+((*it).first-l); it++; } } sum+=v[i].second; } for(int i = 0;i<q;i++){ cout<<ans[i]<<"\n"; } }

Compilation message (stderr)

queue.cpp: In function 'int main()':
queue.cpp:70:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |         while(st<v.size()-1&&cur+v[st].second<=i.first)cur+=v[st].second,st++;
      |               ~~^~~~~~~~~~~
queue.cpp:74:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |     for(int i = 0;i<v.size();i++){
      |                   ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...