제출 #1281087

#제출 시각아이디문제언어결과실행 시간메모리
1281087Jawad_Akbar_JJExamination (JOI19_examination)C++20
0 / 100
212 ms15740 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define os tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> vector<pair<int, int>> v1 = {{-1, -1}}, v2 = v1, Q1, Q2, Q3, Q5, Q4; int a[1<<17], b[1<<17], c[1<<17], Ans[1<<19], Ans2[1<<18]; void process1(){ sort(begin(Q1), end(Q1)); sort(begin(Q4), end(Q4)); os st; for (int i=v1.size()-1;i>=0;i--){ while (Q1.size() > 0 and Q1.back().first > v1[i].first){ auto [vl, id] = Q1.back(); Q1.pop_back(); Ans[id] = st.order_of_key(c[(id + 3) / 4]); } while (Q4.size() > 0 and Q4.back().first >= v1[i].first) Ans2[Q4.back().second] = i, Q4.pop_back(); st.insert(v1[i].first + v1[i].second); } } void process2(){ sort(begin(Q2), end(Q2)); sort(begin(Q5), end(Q5)); os st; for (int i=v2.size()-1;i>=0;i--){ while (Q2.size() > 0 and Q2.back().first > v2[i].first){ auto [vl, id] = Q2.back(); Q2.pop_back(); Ans[id] = st.order_of_key(c[(id + 3) / 4]); } while (Q5.size() > 0 and Q5.back().first >= v2[i].first) Ans2[Q5.back().second] = i, Q5.pop_back(); st.insert(v2[i].first + v2[i].second); } } void process3(){ sort(rbegin(Q3), rend(Q3)); os st; for (int i=1;i<=v1.size();i++){ if (Q3.size() > 0 and (i == v1.size() or Q3.back().first < v1[i].first)){ auto [vl, id] = Q3.back(); Q3.pop_back(); Ans[id] = st.order_of_key(b[(id + 3) / 4]); } if (i != v1.size()) st.insert(v1[i].second); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m; cin>>n>>m; for (int i=1, x, y;i<=n;i++){ cin>>x>>y; v1.push_back({x, y}); v2.push_back({y, x}); } sort(begin(v1), end(v1)); sort(begin(v2), end(v2)); for (int i=1;i<=m;i++){ cin>>a[i]>>b[i]>>c[i]; Q1.push_back({a[i], 4 * i - 3}); Q2.push_back({b[i], 4 * i - 2}); Q1.push_back({0, 4 * i - 1}); Q3.push_back({a[i]-1, 4 * i}); Q4.push_back({a[i] - 1, i * 2 - 1}); Q5.push_back({b[i] - 1, i * 2}); } process1(); process2(); process3(); // for (int i=1;i<=4 * m;i++){ // cout<<i<<" "<<Ans[i]<<'\n'; // if (i % 4 == 0) // cout<<endl; // } // for (int i=1;i<=2 * m;i++){ // cout<<i<<" "<<Ans2[i]<<'\n'; // if (i % 2 == 0) // cout<<endl; // } for (int i=1;i<=m;i++){ if (a[i] + b[i] <= c[i]) cout<<n - (Ans[4 * i - 3] + Ans[4 * i - 2] + Ans[4 * i] - Ans[4 * i - 1]) - (Ans2[i * 2 - 1] + Ans2[i * 2] - Ans[4 * i])<<'\n'; else cout<<n - (Ans2[i * 2 - 1] + Ans2[i * 2] - Ans[4 * i])<<'\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...