제출 #548892

#제출 시각아이디문제언어결과실행 시간메모리
548892fadi57Pilot (NOI19_pilot)C++14
100 / 100
577 ms75512 KiB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
const int mx=1e6+9;

tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>s;
int n,q;
ll siz[mx],par[mx],a[mx],done[mx],anss[mx];
ll ans;
 void init(){
      for(int i=1;i<=n;i++){
        par[i]=i;
        siz[i]=1;
      }

}
int Find(int node){
   if(par[node]==node){
    return node;
   }
   return par[node]=Find(par[node]);
 }
 void uni(int x,int y){
    x=Find(x);
    y=Find(y);
    if(x==y){return;}
     if(siz[x]>siz[y]){
        swap(x,y);
     }
 ans+=siz[x]*siz[y];
 par[x]=y;
 siz[y]+=siz[x];


 }
int main()
{
ios_base::sync_with_stdio(0);
    cin.tie(0);

    vector<pair<int,int>>v;
    vector<pair<int,int>>query;
    cin>>n>>q;
    init();
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        v.push_back({a[i],i});
    }
    sort(v.begin(),v.end());
    for(int i=0; i<q; i++)
    {   int x;
        cin>>x;
        query.push_back({x,i});
    }
     sort(query.begin(),query.end());
     int j=0;
     for(int i=0;i<q;i++){
        while(j<n&&v[j].first<=query[i].first){
            ans++;
            int idx=v[j].second;
            if(idx>0&&done[idx-1]){
                   // cout<<"TESR "<<idx<<endl;
                uni(idx-1,idx);
            }
            if(idx<n&&done[idx+1]){
                 uni(idx+1,idx);
            }
            j++;
            done[idx]=1;
        }
       // cout<<query[i].first<<" "<<query[i].second<<" "<<ans<<endl;
        anss[query[i].second]=ans;

     }
      for(int i=0;i<q;i++){
       cout<<anss[i]<<"\n";

     }


}
#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...