제출 #282433

#제출 시각아이디문제언어결과실행 시간메모리
282433MKopchevLong Mansion (JOI17_long_mansion)C++14
10 / 100
3062 ms9208 KiB
#include<bits/stdc++.h>
using namespace std;

const int nmax=1e5+42;

int n,inp[nmax];

vector<int> seen[nmax];

int can_l[nmax],can_r[nmax];

bool test(int val,int l,int r)
{
    if(seen[val].size()==0)return 0;

    int p=lower_bound(seen[val].begin(),seen[val].end(),l)-seen[val].begin();

    if(p<seen[val].size()&&seen[val][p]<=r)return 1;

    return 0;
}
int main()
{
    scanf("%i",&n);

    for(int i=1;i<n;i++)scanf("%i",&inp[i]);

    for(int i=1;i<=n;i++)
    {
        int sz,val;
        scanf("%i",&sz);

        for(int j=1;j<=sz;j++)
        {
            scanf("%i",&val);
            seen[val].push_back(i);
        }
    }

    for(int i=1;i<=n;i++)
    {
        can_l[i]=i;
        can_r[i]=i;

        while(can_l[i]!=1||can_r[i]!=n)
        {
            if(can_l[i]!=1&&test(inp[can_l[i]-1],can_l[i],can_r[i]))can_l[i]--;
            else if(can_r[i]!=n&&test(inp[can_r[i]],can_l[i],can_r[i]))can_r[i]++;
            else break;
        }
    }

    int q;
    scanf("%i",&q);

    for(int i=1;i<=q;i++)
    {
        int le,ri;
        scanf("%i%i",&le,&ri);

        if(can_l[le]<=ri&&ri<=can_r[le])printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

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

long_mansion.cpp: In function 'bool test(int, int, int)':
long_mansion.cpp:18:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |     if(p<seen[val].size()&&seen[val][p]<=r)return 1;
      |        ~^~~~~~~~~~~~~~~~~
long_mansion.cpp: In function 'int main()':
long_mansion.cpp:24:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   24 |     scanf("%i",&n);
      |     ~~~~~^~~~~~~~~
long_mansion.cpp:26:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   26 |     for(int i=1;i<n;i++)scanf("%i",&inp[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("%i",&sz);
      |         ~~~~~^~~~~~~~~~
long_mansion.cpp:35:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   35 |             scanf("%i",&val);
      |             ~~~~~^~~~~~~~~~~
long_mansion.cpp:54:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   54 |     scanf("%i",&q);
      |     ~~~~~^~~~~~~~~
long_mansion.cpp:59:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   59 |         scanf("%i%i",&le,&ri);
      |         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...