제출 #340495

#제출 시각아이디문제언어결과실행 시간메모리
340495A_DGrudanje (COCI19_grudanje)C++14
49 / 70
2081 ms67184 KiB
/* ID: antwand1 TASK: barn1 LANG: C++ */ #include <bits/stdc++.h> #define ll long long #define int long long #define du long double #define F first #define S second using namespace std; const int N=1e5+1; int mn[N],mx[N]; int l1[N]; int rr[N]; int segmn[4*N]; int segmx[4*N]; int lazymn[4*N]; int lazymx[4*N]; int seg[4*N][26]; string a; int q,n; void fix1(int p,int s,int e) { if(lazymn[p]!=1e18) { if(s!=e) { lazymn[2*p] = min(lazymn[2*p] ,lazymn[p]); lazymn[2*p+1] = min(lazymn[2*p+1] ,lazymn[p]); } else{ mn[s]=min(mn[s],lazymn[p]); } lazymn[p] = 1e18; } if(lazymx[p]) { if(s!=e) { lazymx[2*p] = max(segmx[2*p] ,lazymx[p]); lazymx[2*p+1] = max(segmx[2*p+1] ,lazymx[p]); } else{ mx[s]=max(mx[s],lazymx[p]); } lazymx[p] = 0; } } void update1(int p,int s,int e,int a,int b) { fix1(p,s,e); if(s>=a && e<=b) { lazymn[p] =min(lazymn[p], a); lazymx[p] =max(lazymx[p], b); fix1(p,s,e); return; } if(s>b || e<a) return; update1(2*p,s,(s+e)/2,a,b); update1(2*p+1,(s+e)/2+1,e,a,b); } void build1(int p,int s,int e) { fix1(p,s,e); if(s==e) { return; } build1(2*p,s,(s+e)/2); build1(2*p+1,(s+e)/2+1,e); } void build(int p,int s,int e,int &num) { if(s==e) { if(a[s]-'a'==num)seg[p][num]=1; return; } build(2*p,s,(s+e)/2,num); build(2*p+1,(s+e)/2+1,e,num); seg[p][num] = seg[2*p][num] + seg[2*p+1][num]; } void update(int p,int s,int e,int&i,int&r) { if(s==e) { seg[p][r] = 0; return; } if(i <= (s+e)/2) update(2*p,s,(s+e)/2,i,r); else update(2*p+1,(s+e)/2+1,e,i,r); seg[p][r] = seg[2*p][r] + seg[2*p+1][r]; } int get(int p,int s,int e,int a, int b,int&i) { if(s>=a && e<=b) return seg[p][i]; if(s>b || e<a) return 0; return get(2*p,s,(s+e)/2,a,b,i) + get(2*p+1,(s+e)/2+1,e,a,b,i); } bool ok() { for(int i=1;i<=q;i++){ for(int j=0;j<26;j++){ if(get(1,1,n,l1[i],rr[i],j)>1)return 0; } } return 1; } main() { //freopen("barn1.in","r",stdin);freopen("barn1.out","w",stdout); cin>>a; int r=0; n=a.size(); a="#"+a; cin>>q; for(int i=1;i<=4*n;i++){ segmn[i]=1e18; lazymn[i]=1e18; } for(int i=1;i<=n;i++){ mn[i]=i; mx[i]=i; update1(1,1,n,i,i); } for(long i=1;i<=q;i++){ int l,r; cin>>l>>r; update1(1,1,n,l,r); l1[i]=l; rr[i]=r; } build1(1,1,n); for(int i=0;i<26;i++){ build(1,1,n,i); } for(int i=1;i<=n;i++){ int h=a[i]-'a'; int s=get(1,1,n,mn[i],mx[i],h); if(s!=1)r++; } if(ok()){ cout<<0<<endl; return 0; } for(int i=1;i<=n;i++){ int h; cin>>h; int q=a[h]-'a'; update(1,1,n,h,q); if(ok()){ cout<<i<<endl; return 0; } } }

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

grudanje.cpp:103:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  103 | main()
      |      ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...