Codeforces 12D Ball 樹狀數組類比3個元素的排序

來源:互聯網
上載者:User

標籤:class   blog   code   http   tar   com   

題目連結:點擊開啟連結


#include<stdio.h>#include<iostream>#include<string.h>#include<set>#include<vector>#include<map>#include<math.h>#include<queue>#include<string>#include<stdlib.h>#include<algorithm>using namespace std;#define N 500005#define ll intll n;ll c[N], maxn;inline ll lowbit(ll x){return x&(-x);}void change(ll pos, ll val){while(pos)c[pos]=max(c[pos],val), pos-=lowbit(pos);}ll maxx(ll pos){ll ans = -1;while(pos<=maxn)ans = max(ans,c[pos]),pos+=lowbit(pos);return ans;}struct node{ll b[3],num;}w[N];bool cmp0(node x, node y){return x.b[0]<y.b[0];}bool cmp1(node x, node y){return x.b[1]>y.b[1];}int main(){ll i,j;while(cin>>n) {for(i=0;i<n;i++)scanf("%d",&w[i].b[0]);for(i=0;i<n;i++)scanf("%d",&w[i].b[1]);for(i=0;i<n;i++)scanf("%d",&w[i].b[2]);sort(w, w+n, cmp0);ll rank = 1;w[0].num = 1;for(i=1;i<n;i++) {if(w[i].b[0]==w[i-1].b[0])w[i].num = rank;else w[i].num = ++rank;}sort(w,w+n,cmp1);for(i=1;i<=rank;i++)c[i]=-1;maxn = rank;i = 0;ll ans = 0;while(i<n) {for(j = i; j < n && w[i].b[1] == w[j].b[1]; j++)if(maxx(w[j].num+1)>w[j].b[2])ans++;for(j = i; j < n && w[i].b[1] == w[j].b[1]; j++)change(w[j].num, w[j].b[2]);i = j;}cout<<ans<<endl;}return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.