답안 #731707

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
731707 2023-04-27T20:28:26 Z shadow_sami Martian DNA (BOI18_dna) C++17
0 / 100
222 ms 146468 KB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long int ll;
typedef vector<ll> vi;
typedef pair<ll,ll> pi;
#define ff first
#define ss second
#define all(a) a.begin(),a.end()
#define fip(a,b) for(ll i = a; i < b ; i++)
#define fjp(a,b) for(ll j = a; j < b ; j++)
#define fp(k,a,b) for(ll k = a; k < b ; k++)
#define fin(a,b) for(ll i = a; i >= b ; i--)
#define fjn(a,b) for(ll i = a; j >= b ; j--)
#define fn(k,a,b) for(ll k = a; k >= b ; k--)
#define fx(a) for(auto x : a)
#define ordered_set tree<pi,null_type,less<pi>,rb_tree_tag,tree_order_statistics_node_update>
#define total_one(k) __builtin_popcount(k)
#define back_zero(k) __builtin_ctzll(k)
#define front_zero(k) __builtin_clzll(k)
#define nli "\n"

ll n,m,ans,sum,res,cnt,tptp,tp,tp2,q;

const ll mx = 2e5 + 5;
const ll mod = 1e9 + 7;

bool f = false;

ll a[mx];
ll tnc[mx];
ll mn[mx];
deque<ll> dq[mx];

typedef struct Segment_tree{
	vi arr;
	ll range;
	void init(ll k){
		range = log2(k);
		range = 1 << (range+3);
		arr.resize(range,-100);
		return;
	}
	ll query(ll ptr,ll l,ll r,ll st,ll en){
		if(l>en || r<st)
			return 1e18;
		if(l>=st && r<=en)
			return arr[ptr];
		ll mid = l + (r-l)/2;
		return min(query(2*ptr,l,mid,st,en),query(2*ptr+1,mid+1,r,st,en));
	}
	ll update(ll ptr,ll l,ll r,ll pos,ll val){
		if(l==r && r==pos){
			mn[r] = val;
			arr[ptr] = val;
			return arr[ptr] = val;
		}
		if(l>pos || r<pos)
			return arr[ptr];
		ll mid = l + (r-l)/2;
		arr[ptr] = min(update(2*ptr,l,mid,pos,val),update(2*ptr+1,mid+1,r,pos,val));	
		return arr[ptr];
	}
}SGT;

SGT sgt;

int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	// #ifdef code
		// freopen("input1.txt","r",stdin);
		// freopen("output1.txt","w",stdout);
		// freopen("error1.txt","w",stderr);
	// #endif

		cin>>n>>m>>q;
		sgt.init(m);
		fip(1,n+1){
			cin>>a[i],tnc[i] = -1;
		}
		set<ll> st;
		fip(0,q){
			cin>>tp>>tp2;
			tnc[tp] = tp2;
			st.insert(tp);
		}
		ans = 1e9;
		fip(1,n+1){
			if(tnc[a[i]]!=-1){
				dq[a[i]].push_back(i);
				if((long long)dq[a[i]].size()>tnc[a[i]])
					dq[a[i]].pop_front();
				if((long long)dq[a[i]].size()==tnc[a[i]])
					sgt.update(1,0,m-1,a[i],dq[a[i]].front());
			}		
			tp = sgt.query(1,0,m-1,0,m-1);
			if(tp==-100)
				continue;
			ans = min(ans,i-tp+1);
		}
		if(ans==1e9){
			cout<<"impossible";
			return 0;
		}
		cout<<ans<<nli;

	// cerr << "Time elapsed : " << setprecision(6) << 100.00 * clock() / CLOCKS_PER_SEC << "ms\n";
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 76 ms 134872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 79 ms 135028 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 98 ms 138808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 222 ms 146468 KB Output isn't correct
2 Halted 0 ms 0 KB -