제출 #675254

#제출 시각아이디문제언어결과실행 시간메모리
675254uyluluTable Tennis (info1cup20_tabletennis)C++17
0 / 100
3116 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define ld long double #define int long long // #define endl "\n" const int N = 3e5,K = 20; int r,c,n,q,lg[N + 1]; map<int,vector<int>> green; vector<vector<int>> idx; vector<int> row; vector<int> sparse[N + 1][K + 1]; int query(int r1,int c1,int r2) { r1--; r2--; int len = r2 - r1; if(r1 == r2) { auto it = lower_bound(idx[r1].begin(),idx[r1].end(),c1); return (*it); } auto it = lower_bound(idx[r1].begin(),idx[r1].end(),c1); if(it == idx[r1].end()) return LLONG_MAX; int pp = it - idx[r1].begin(); int res = c1; for(int j = K;j >= 0;j--) { int tmp = (len >> j) % 2; if(tmp == 0) continue; int nxt = sparse[r1][j][pp]; r1 += (1<<j); res = max(res,nxt); it = lower_bound(idx[r1].begin(),idx[r1].end(),nxt); if(it == idx[r1 + (1<<j)].end()) { return LLONG_MAX; } pp = it - idx[r1].begin(); } return res; } map<int,int> uy; signed main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); cin>>r>>c>>n; for(int i = 2;i <= N;i++) { lg[i] = lg[i/2] + 1; } for(int i = 0;i < n;i++) { int x,y; cin>>x>>y; green[x].push_back(y); } for(auto u : green) { u.second.push_back(LLONG_MAX); sort(u.second.begin(),u.second.end()); idx.push_back(u.second); row.push_back(u.first); } for(int i = 0;i < idx.size();i++) { for(int j = 0;j <= K;j++) { sparse[i][j].assign(idx[i].size(),0); } } for(int i = 0;i < idx.size();i++) { uy[row[i]] = i + 1; for(int j = 0;j < idx[i].size();j++) { if(i == (int)idx.size() - 1 || row[i] + 1 != row[i + 1]) { sparse[i][0][j] = LLONG_MAX; } else { auto it = lower_bound(idx[i + 1].begin(),idx[i + 1].end(),idx[i][j]); sparse[i][0][j] = (*it); } } } for(int j = 1;j <= K;j++) { for(int i = 0;i + (1<<j) <= (int)idx.size();i++) { for(int pp = 0;pp < idx[i].size();pp++) { int fi = sparse[i][j - 1][pp]; auto it = lower_bound(idx[i + (1<<(j - 1))].begin(),idx[i + (1<<(j - 1))].end(),fi); if(row[i + (1<<(j - 1)) - 1] != row[i + (1<<(j - 1))]) { sparse[i][j][pp] = LLONG_MAX; } else { int pos = it - idx[i + (1<<(j - 1))].begin(); sparse[i][j][pp] = sparse[i + (1<<(j - 1))][j - 1][pos]; } } } } int q; cin>>q; while(q--) { int r1,c1,r2,c2; cin>>r1>>c1>>r2>>c2; if(r1 == r2) { cout<<"YES"<<endl; continue; } if(r1 > r2 || c1 > c2) { cout<<"NO"<<endl; continue; } r1 = uy[r1]; if(r1 == 0) { cout<<"NO"<<endl; continue; } int mn = LLONG_MAX; if(uy[r2] != 0) { mn = min(mn,query(r1,c1,uy[r2])); } if(uy[r2 - 1] != 0) { mn = min(mn,query(r1,c1,uy[r2 - 1])); } if(mn > c2) { cout<<"NO"<<endl; } else { cout<<"YES"<<endl; } } return 0; }

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

tabletennis.cpp: In function 'int main()':
tabletennis.cpp:79:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     for(int i = 0;i < idx.size();i++) {
      |                   ~~^~~~~~~~~~~~
tabletennis.cpp:84:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     for(int i = 0;i < idx.size();i++) {
      |                   ~~^~~~~~~~~~~~
tabletennis.cpp:87:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |         for(int j = 0;j < idx[i].size();j++) {
      |                       ~~^~~~~~~~~~~~~~~
tabletennis.cpp:98:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |             for(int pp = 0;pp < idx[i].size();pp++) {
      |                            ~~~^~~~~~~~~~~~~~~
#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...