제출 #224558

#제출 시각아이디문제언어결과실행 시간메모리
224558kshitij_sodaniPilot (NOI19_pilot)C++17
89 / 100
1095 ms55160 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
#define pb push_back
typedef long long llo;
llo par[1000001];
llo ss[1000001];
llo find(llo no){

	if(par[no]==no){
		return no;
	}
	par[no]=find(par[no]);
	return par[no];
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	llo n,q;
	cin>>n>>q;

	for(llo i=0;i<n;i++){
		par[i]=i;
		ss[i]=0;
	}

	pair<llo,llo> tt[n];
	llo aa;

	for(llo i=0;i<n;i++){
		cin>>aa;
		tt[i]={aa,i};
	}
	llo ans2[q];
	pair<llo,llo> it[q];
	for(llo i=0;i<q;i++){
		cin>>aa;

		it[i]={aa,i};
	}
	sort(tt,tt+n);
	sort(it,it+q);

	llo ind=0;
	llo ans=0;

	for(llo k=0;k<q;k++){
		pair<llo,llo> nn=it[k];

		while(ind<n){
			if(tt[ind].a<=nn.a){
				ss[tt[ind].b]=1;
				ans+=1;
				if(tt[ind].b>0){
					if(ss[tt[ind].b-1]>0){
						llo x=find(tt[ind].b-1);
						/*ans-=calc(x);
						ans-=calc(tt[ind].b);*/
						ans+=ss[x];
						ss[x]+=ss[tt[ind].b];
						par[tt[ind].b]=x;
					//	ans+=calc(x);
					}
					
				}
				if(tt[ind].b<n-1){
					if(ss[tt[ind].b+1]>0){
						llo y=find(tt[ind].b);
						llo x=find(tt[ind].b+1);
						if(ss[x]>ss[y]){
						/*	ans-=calc(x);
							ans-=calc(y);*/
							ans+=ss[x]*ss[y];
							ss[x]+=ss[y];
							par[y]=x;
						//	ans+=calc(x);
						}
						else{
							/*ans-=calc(x);
							ans-=calc(y);*/
							ans+=ss[x]*ss[y];
							ss[y]+=ss[x];
							par[x]=y;
							/*ans+=calc(y);*/
						}

					}
				}
				ind+=1;
			}
			else{
				break;
			}
		}
	//	cout<<nn.b<<" "<<ans<<endl;
		ans2[nn.b]=ans;
	}
	for(llo i=0;i<q;i++){
		cout<<ans2[i]<<endl;
	}




	return 0;
}
#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...