Submission #319229

#TimeUsernameProblemLanguageResultExecution timeMemory
319229kshitij_sodaniMoney (IZhO17_money)C++14
45 / 100
1561 ms122408 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
//#define endl '\n'
int n;
int it[1000001];
int tree[1000001*4];
int vis[1000001*2];
void build(int no,int l,int r){
	if(l==r){
		tree[no]=it[l];
	}
	else{
		int mid=(l+r)/2;
		build(no*2+1,l,mid);
		build(no*2+2,mid+1,r);
		tree[no]=max(tree[no*2+1],tree[no*2+2]);
	}
}
int query(int no,int l,int r,int aa,int bb){
	if(r<aa){
		return -1;
	}
	if(aa<=l){
		if(tree[no]<=bb){
			return -1;
		}
		if(l==r){
			return l;
		}
	}
	int mid=(l+r)/2;
	int x=query(no*2+1,l,mid,aa,bb);
	if(x==-1){
		return query(no*2+2,mid+1,r,aa,bb);
	}
	else{
		return x;
	}
}
bool cmp(pair<pair<int,int>,int> aa,pair<pair<int,int>,int> bb){
	return aa.a.b<bb.a.b;
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>it[i];
	}
	vector<pair<int,int>> ss;
	vector<pair<pair<int,int>,int>> tt;
	set<int> kk;
	build(0,0,n-1);
	int cur=0;
	for(int i=0;i<n;i++){
		while(ss.size()){
			if(ss.back().a<=it[i]){
				ss.pop_back();
			}
			else{
				break;
			}
		}
		if(ss.size()){
			int ne=ss.back().b;
			tt.pb({{ne,i-1},cur});
			cur++;
			int jj=*kk.upper_bound(it[i]);
			/*int low=i;
			for(int j=19;j>=0;j--){
				if(low+(1<<j)<n){
					if(query(0,0,n-1,i,low+(1<<j))<=jj){
						low+=(1<<j);
					}
				}
			}*/
			int low=query(0,0,n-1,i,jj);
			if(low!=-1){
				tt.pb({{i,low-1},cur});
				cur++;
			}
		}
		kk.insert(it[i]);
		ss.pb({it[i],i});
	}
	vector<pair<pair<int,int>,int>> mm;
	for(auto j:tt){
		mm.pb(j);
	}
	sort(mm.begin(),mm.end());
	sort(tt.begin(),tt.end(),cmp);
	int ans=1;
	int ind=0;
	for(auto j:tt){
		if(vis[j.b]==0){
			ans+=1;
			while(ind<mm.size()){
				if(mm[ind].a.a<=j.a.b){
					vis[mm[ind].b]=1;
					ind++;
				}
				else{
					break;
				}
			}
		}
	}
	cout<<ans<<endl;
 
	return 0;
}

Compilation message (stderr)

money.cpp: In function 'int main()':
money.cpp:102:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  102 |    while(ind<mm.size()){
      |          ~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...