CF878D

来源:互联网 发布:手机免root数据恢复apk 编辑:程序博客网 时间:2024/06/11 04:08

感觉这道题挺巧妙的(也可能是我题做少了),将取min和取max转化为了集合求交,并。
具体实现的时候,一个新的生物所对应的bitset,是他的父母对应的bitset取交和并后的集合,及其母集(与子集相对应,可能有更高级的叫法)
查询的时候,从高到低枚举这个生物的特性,在初始的k种生物中的排名,就行了。

#include<bits/stdc++.h>#include<cstdio> const int N=100050;int n,k,q,a[13][N],i,j,b[N][13],xb,o,x,y;inline bool cmp(int x,int y){return a[x][i]<a[y][i];}std::bitset<4096> c[N];int main(){    scanf("%d%d%d",&n,&k,&q);    for(i=1;i<=k;++i)        for(j=1;j<=n;++j){            scanf("%d",a[i]+j);            b[j][i]=i;        }    for(i=1;i<=n;++i)std::sort(b[i]+1,b[i]+k+1,cmp);    for(i=1;i<=k;++i)        for(j=0;j<1<<k;++j)if(j>>(i-1)&1)c[i][j]=1;xb=k;    while(q--){        scanf("%d%d%d",&o,&x,&y);        if(o==1)c[++xb]=c[x]|c[y];        if(o==2)c[++xb]=c[x]&c[y];        if(o==3){            for(i=k,j=0;!c[x][j];j|=1<<(b[y][i--]-1));++i;            printf("%d\n",a[b[y][i]][y]);        }    }    return 0;}

然后这几天在逛UOJ的hack区时,发现有个用户@peehs_moorhsum交了很多理论可以hack的A+B,把这人点开一看,发现rating超高,比我高到不知道哪里去了。又通过一些奇怪的途径,发现这人名叫邓明扬,跟我一届的,然而NOI2017以正式选手身份拿到Ag,感觉比我强多了。
本来在想比我强这么多,可能是早期就比较厉害吧,然后发现noip2015时他考普及,只有190,看来2015-2017进步很大。
反观我,都不知道2015-2017在干什么,每天浑浑噩噩,在自己的小天地里,还自我感觉良好,殊不知别人早已远超自己。
感觉好难过啊,顿时世界观崩塌,就像得知WA爷爷高中开始学OI,还能高二拿IOI金牌时一样。

原创粉丝点击