제출 #582057

#제출 시각아이디문제언어결과실행 시간메모리
582057urd05Long Mansion (JOI17_long_mansion)C++17
25 / 100
1302 ms262144 KiB
#include <bits/stdc++.h> using namespace std; int n; int c[500000]; vector<int> vec[500001]; typedef pair<int,int> P; vector<int> v[500001]; P ret[500001]; int l[500001]; int r[500001]; vector<int> lev[500001]; //l[i]의 인버스 vector<int> rev[500001]; //r[i]의 인버스 priority_queue<int,vector<int>,greater<int>> pqr; priority_queue<int,vector<int>,greater<int>> pre; priority_queue<int> pql; priority_queue<int> ple; vector<int> vl[500001]; vector<int> erl[500001]; vector<int> vr[500001]; vector<int> err[500001]; int main(void) { scanf("%d",&n); for(int i=1;i<n;i++) { scanf("%d",&c[i]); vec[c[i]].push_back(i*2+1); } for(int i=1;i<=n;i++) { int k; scanf("%d",&k); for(int j=0;j<k;j++) { int x; scanf("%d",&x); v[x].push_back(i*2); } } for(int i=1;i<=n;i++) { vec[i].push_back(1); vec[i].push_back(2*n+1); sort(vec[i].begin(),vec[i].end()); v[i].push_back(0); v[i].push_back(2*n+2); sort(v[i].begin(),v[i].end()); } rev[n].push_back(0); lev[1].push_back(n); for(int i=1;i<n;i++) { int pos=2*i+1; auto iter=lower_bound(v[c[i]].begin(),v[c[i]].end(),pos); r[i]=(*iter)/2; iter--; l[i]=(*iter)/2; rev[r[i]].push_back(i); lev[l[i]].push_back(i); } set<int> s; for(int i=0;i<rev[n+1].size();i++) { s.insert(rev[n+1][i]); } for(int i=n-1;i>0;i--) { for(int j=0;j<rev[i+1].size();j++) { s.insert(rev[i+1][j]); } auto iter=s.lower_bound(l[i]); if (iter==s.end()) { continue; } int pos=(*s.lower_bound(l[i]))+1; vr[pos].push_back(i); err[i].push_back(i); } s.clear(); for(int i=0;i<lev[0].size();i++) { s.insert(lev[0][i]); } for(int i=1;i<n;i++) { for(int j=0;j<lev[i].size();j++) { s.insert(lev[i][j]); } auto iter=s.lower_bound(r[i]); if (iter==s.begin()) { continue; } iter--; int pos=(*iter); if (i+1<=pos) { vl[i+1].push_back(i+1); erl[pos].push_back(i+1); } } pql.push(1); pqr.push(n); for(int i=1;i<=n;i++) { for(int j=0;j<vl[i].size();j++) { pql.push(vl[i][j]); } for(int j=0;j<vr[i].size();j++) { pqr.push(vr[i][j]); } while (!ple.empty()&&pql.top()==ple.top()) { pql.pop(); ple.pop(); } while (!pre.empty()&&pqr.top()==pre.top()) { pre.pop(); pqr.pop(); } ret[i]=P(pql.top(),pqr.top()); for(int j=0;j<erl[i].size();j++) { ple.push(erl[i][j]); } for(int j=0;j<err[i].size();j++) { pre.push(err[i][j]); } //printf("%d %d\n",ret[i].first,ret[i].second); } int q; scanf("%d",&q); for(int i=0;i<q;i++) { int x,y; scanf("%d %d",&x,&y); if (ret[x].first<=y&&y<=ret[x].second) { printf("YES\n"); } else { printf("NO\n"); } } }

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

long_mansion.cpp: In function 'int main()':
long_mansion.cpp:58:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     for(int i=0;i<rev[n+1].size();i++) {
      |                 ~^~~~~~~~~~~~~~~~
long_mansion.cpp:62:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for(int j=0;j<rev[i+1].size();j++) {
      |                     ~^~~~~~~~~~~~~~~~
long_mansion.cpp:74:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |     for(int i=0;i<lev[0].size();i++) {
      |                 ~^~~~~~~~~~~~~~
long_mansion.cpp:78:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |         for(int j=0;j<lev[i].size();j++) {
      |                     ~^~~~~~~~~~~~~~
long_mansion.cpp:95:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |         for(int j=0;j<vl[i].size();j++) {
      |                     ~^~~~~~~~~~~~~
long_mansion.cpp:98:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |         for(int j=0;j<vr[i].size();j++) {
      |                     ~^~~~~~~~~~~~~
long_mansion.cpp:110:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |         for(int j=0;j<erl[i].size();j++) {
      |                     ~^~~~~~~~~~~~~~
long_mansion.cpp:113:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |         for(int j=0;j<err[i].size();j++) {
      |                     ~^~~~~~~~~~~~~~
long_mansion.cpp:24:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
long_mansion.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         scanf("%d",&c[i]);
      |         ~~~~~^~~~~~~~~~~~
long_mansion.cpp:31:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |         scanf("%d",&k);
      |         ~~~~~^~~~~~~~~
long_mansion.cpp:34:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |             scanf("%d",&x);
      |             ~~~~~^~~~~~~~~
long_mansion.cpp:119:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  119 |     scanf("%d",&q);
      |     ~~~~~^~~~~~~~~
long_mansion.cpp:122:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  122 |         scanf("%d %d",&x,&y);
      |         ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...