Submission #224508

#TimeUsernameProblemLanguageResultExecution timeMemory
224508kshitij_sodaniPilot (NOI19_pilot)C++17
89 / 100
253 ms8292 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
#define pb push_back
typedef long long int llo;
llo mod=1000000007;
llo par[100001];
llo ss[100001];
llo find(llo no){
	if(par[no]==no){
		return no;
	}
	par[no]=find(par[no]);
	return par[no];
}
llo calc(llo no){
	return (ss[no]*(ss[no]+1))/2;
}
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;
	}
	vector<pair<llo,llo>> tt;
	llo aa;
	for(llo i=0;i<n;i++){
		cin>>aa;
		tt.pb({aa,i});
	}
	llo ans2[q];
	vector<pair<llo,llo>> it;
	for(llo i=0;i<q;i++){
		cin>>aa;
		it.pb({aa,i});
	}
	sort(tt.begin(),tt.end());
	sort(it.begin(),it.end());
	llo ind=0;
	llo ans=0;
	for(auto nn:it){
		while(ind<n){

			if(tt[ind].a<=nn.a){
				ss[tt[ind].b]=1;
				ans+=calc(tt[ind].b);
				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);
						ss[tt[ind].b]+=ss[x];
						par[x]=tt[ind].b;
						ans+=calc(tt[ind].b);
					}
					
				}
				if(tt[ind].b<n-1){
					if(ss[tt[ind].b+1]>0){
						llo x=find(tt[ind].b+1);
						ans-=calc(x);
						ans-=calc(tt[ind].b);
						ss[tt[ind].b]+=ss[x];
						par[x]=tt[ind].b;
						ans+=calc(tt[ind].b);
					}
				}
				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...