Submission #1039728

#TimeUsernameProblemLanguageResultExecution timeMemory
1039728AndreyGift Exchange (JOI24_ho_t4)C++14
100 / 100
1354 ms197064 KiB
#include<bits/stdc++.h> using namespace std; vector<pair<int,int>> haha(500001); vector<int> seg(4000001,-1); vector<int> wow(4000001,-1); vector<pair<int,int>> bruh(500001); vector<pair<int,int>> wut[2000001]; int no; bool yeah = true; void upd(int l, int r, int ql, int qr, int x, int br) { no = max(no,wow[x]); if(l == ql && r == qr) { no = max(no,seg[x]); wow[x] = max(wow[x],br); seg[x] = max(seg[x],wow[x]); return; } int mid = (l+r)/2; if(qr <= mid) { upd(l,mid,ql,qr,x*2,br); } else if(ql > mid) { upd(mid+1,r,ql,qr,x*2+1,br); } else { upd(l,mid,ql,mid,x*2,br); upd(mid+1,r,mid+1,qr,x*2+1,br); } seg[x] = max(wow[x],seg[x*2]); seg[x] = max(seg[x],seg[x*2+1]); } void build(int l, int r, int x) { for(int i = l; i <= r; i++) { wut[x].push_back(bruh[i]); } sort(wut[x].begin(),wut[x].end()); for(int i = 1; i < wut[x].size(); i++) { wut[x][i] = {wut[x][i].first,max(wut[x][i].second,wut[x][i-1].second)}; } if(l == r) { return; } int mid = (l+r)/2; build(l,mid,x*2); build(mid+1,r,x*2+1); } void dude(int l, int r, int ql, int qr, int x, int s, int b) { if(l == ql && r == qr) { if(wut[x][0].first >= s) { return; } int bl = 0,br = wut[x].size()-1; while(bl < br) { int mid = (bl+br+1)/2; if(wut[x][mid].first < s) { bl = mid; } else { br = mid-1; } } if(wut[x][bl].second > b) { yeah = false; } return; } int mid = (l+r)/2; if(qr <= mid) { dude(l,mid,ql,qr,x*2,s,b); } else if(ql > mid) { dude(mid+1,r,ql,qr,x*2+1,s,b); } else { dude(l,mid,ql,mid,x*2,s,b); dude(mid+1,r,mid+1,qr,x*2+1,s,b); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,a,b; cin >> n; for(int i = 1; i <= n; i++) { cin >> a; haha[i] = {0,a}; } for(int i = 1; i <= n; i++) { cin >> a; haha[i] = {a,haha[i].second}; } for(int i = 1; i <= n; i++) { no = -1; upd(1,2*n,haha[i].first,haha[i].second,1,i); bruh[i] = {no,0}; } for(int i = 0; i < seg.size(); i++) { seg[i] = -1; wow[i] = -1; } for(int i = n; i >= 1; i--) { no = -1; upd(1,2*n,haha[i].first,haha[i].second,1,n-i+1); bruh[i] = {bruh[i].first,n-no+1}; } build(1,n,1); int q; cin >> q; for(int i = 0; i < q; i++) { cin >> a >> b; yeah = true; dude(1,n,a,b,1,a,b); if(yeah) { cout << "Yes\n"; } else { cout << "No\n"; } } return 0; }

Compilation message (stderr)

Main.cpp: In function 'void build(int, int, int)':
Main.cpp:40:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     for(int i = 1; i < wut[x].size(); i++) {
      |                    ~~^~~~~~~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:104:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |     for(int i = 0; i < seg.size(); i++) {
      |                    ~~^~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...