제출 #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...