您的位置:首页 > 其它

[bzoj1106] [POI2007]立方体大作战tet

2016-06-19 11:47 411 查看
  两对数中间相交应该是可以随便取得。。如果一对数被包含的话,就应该先选这对数。

  按顺序读入,凑成一对数就扔掉,树状数组更新对其他位置的影响。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=50023;
int t[maxn<<1],pre[maxn];
int i,j,k,n,m,ans;

inline void del(int x){while(x<=n)t[x]--,x+=x&-x;}
inline void add(int x){while(x<=n)t[x]++,x+=x&-x;}
inline int get(int x){int sm=0;while(x)sm+=t[x],x-=x&-x;return sm;}
int ra;char rx;
inline int read(){
rx=getchar(),ra=0;
while(rx<'0'||rx>'9')rx=getchar();
while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;
}
int main(){
n=read()<<1;
for(i=1;i<=n;i++){
j=read();
if(!pre[j])pre[j]=i,add(i);else
ans+=get(i)-get(pre[j]-1)-1,
del(pre[j]);
}
printf("%d\n",ans);
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: