[bzoj1106] [POI2007]立方体大作战tet
Posted czllgzmzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj1106] [POI2007]立方体大作战tet相关的知识,希望对你有一定的参考价值。
两对数中间相交应该是可以随便取得。。如果一对数被包含的话,就应该先选这对数。
按顺序读入,凑成一对数就扔掉,树状数组更新对其他位置的影响。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdlib> 5 using namespace std; 6 const int maxn=50023; 7 int t[maxn<<1],pre[maxn]; 8 int i,j,k,n,m,ans; 9 10 inline void del(int x){while(x<=n)t[x]--,x+=x&-x;} 11 inline void add(int x){while(x<=n)t[x]++,x+=x&-x;} 12 inline int get(int x){int sm=0;while(x)sm+=t[x],x-=x&-x;return sm;} 13 int ra;char rx; 14 inline int read(){ 15 rx=getchar(),ra=0; 16 while(rx<\'0\'||rx>\'9\')rx=getchar(); 17 while(rx>=\'0\'&&rx<=\'9\')ra*=10,ra+=rx-48,rx=getchar();return ra; 18 } 19 int main(){ 20 n=read()<<1; 21 for(i=1;i<=n;i++){ 22 j=read(); 23 if(!pre[j])pre[j]=i,add(i);else 24 ans+=get(i)-get(pre[j]-1)-1, 25 del(pre[j]); 26 } 27 printf("%d\\n",ans); 28 }
以上是关于[bzoj1106] [POI2007]立方体大作战tet的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1106 [POI2007]立方体大作战tet(树状数组)