제출 #92111

#제출 시각아이디문제언어결과실행 시간메모리
92111emil_physmathSegments (IZhO18_segments)C++17
7 / 100
5011 ms7032 KiB
#include <iostream> #include <stdio.h> #include <queue> #include <vector> #include <set> using namespace std; void SubTaskOne(int n, int t); void SubTaskTwo(int n, int t); void SubTaskThree(int n, int t); int FindAns(const multiset<int> & segL, const multiset<int> & segR, int l, int r, int k); int main() { int n, t; cin>>n>>t; if (n<=5000) SubTaskOne(n, t); else SubTaskThree(n, t); char I; cin >> I; return 0; } void SubTaskOne(int n, int t) { int lastans=0; vector<pair<int, int> > seg; while (n--) { int type, l, r, k, id; cin>>type; if (type==1) { cin>>l>>r; l=(l^(t*lastans)); r=(r^(t*lastans)); if (l>r) swap(l, r); seg.push_back(make_pair(l, r)); } else if (type==2) { cin>>id; seg[id-1]=make_pair(-1, -1); } else if (type==3) { int ans=0; cin>>l>>r>>k; l=(l^(t*lastans)); r=(r^(t*lastans)); if (l>r) swap(l, r); for (int i=0; i<seg.size(); i++) if (seg[i].first!=-1 && min(seg[i].second, r)-max(seg[i].first, l)+1>=k) ans++; cout<<ans<<'\n'; lastans=ans; } } } void SubTaskThree(int n, int t) { int lastans=0; vector<pair<int, int> > a; multiset<int> a_l, a_r, b_l, b_r; while (n--) { int type, l, r, k, id; scanf("%d", &type); if (type==1) { scanf("%d%d", &l, &r); l=(l^(t*lastans)); r=(r^(t*lastans)); if (l>r) swap(l, r); a.push_back(make_pair(l, r)); a_l.insert(l); a_r.insert(r); } else if (type==2) { scanf("%d", &id); // b.push_back(a[id-1]); b_l.insert(a[id-1].first); b_r.insert(a[id-1].second); } else if (type==3) { int ans=0; scanf("%d%d%d", &l, &r, &k); l=(l^(t*lastans)); r=(r^(t*lastans)); if (l>r) swap(l, r); ans=FindAns(a_l, a_r, l, r, k)-FindAns(b_l, b_r, l, r, k); printf("%d\n", ans); lastans=ans; } } } int FindAns(const multiset<int> & segL, const multiset<int> & segR, int l, int r, int k) { if (k==1) { int ans=segL.size(); ans-=distance(segL.upper_bound(r), segL.end()); if (segR.size()) { auto it=segR.lower_bound(l); if (it!=segR.begin()) ans-=distance(segR.begin(), --it); } return ans; } }

컴파일 시 표준 에러 (stderr) 메시지

segments.cpp: In function 'void SubTaskOne(int, int)':
segments.cpp:54:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int i=0; i<seg.size(); i++)
                  ~^~~~~~~~~~~
segments.cpp: In function 'void SubTaskThree(int, int)':
segments.cpp:71:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &type);
   ~~~~~^~~~~~~~~~~~~
segments.cpp:74:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d%d", &l, &r);
    ~~~~~^~~~~~~~~~~~~~~~
segments.cpp:84:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d", &id);
    ~~~~~^~~~~~~~~~~
segments.cpp:92:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d%d%d", &l, &r, &k);
    ~~~~~^~~~~~~~~~~~~~~~~~~~~~
segments.cpp: In function 'int FindAns(const std::multiset<int>&, const std::multiset<int>&, int, int, int)':
segments.cpp:116:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...