CF878D

感觉这道题挺巧妙的(也可能是我题做少了),将取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金牌时一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值