博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ - 3578: GTY的人类基因组计划2
阅读量:5717 次
发布时间:2019-06-18

本文共 1834 字,大约阅读时间需要 6 分钟。

第一次居然hash被卡了。改了改rd()就A了。

题解:咱给每个人都随机一个数,几个人就是把他们的数异或起来,用set判重。再开一个set记录合法的房间。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 inline char nc() { 8 static char b[1<<16],*s=b,*t=b; 9 return s==t&&(t=(s=b)+fread(b,1,1<<16,stdin),s==t)?-1:*s++;10 }11 inline void read(int &x) {12 char b = nc(); x = 0;13 for (; !isdigit(b); b = nc());14 for (; isdigit(b); b = nc()) x = x * 10 + b - '0';15 }16 inline int op() {17 char b = nc(); for (; b != 'C' && b != 'W'; b = nc()); return b == 'C';18 }19 typedef unsigned long long ull;20 typedef ull bt;21 int n, m, q, p[100005], c[100005];22 const ull ULL_MAX = -1;23 bt a[100005], b[100005];24 inline ull rd() {25 return ull(rand()) * rand() * rand();26 }27 set < bt > h;28 set < int > s;29 int main() {30 read(n); read(m); read(q); srand(89513255); s.insert(1);31 for (int i = 1; i <= n; ++i) a[i] = rd(), p[i] = 1;32 for (int i = 1; i <= n; ++i) b[1] ^= a[i]; c[1] = n;33 for (int l, r, o, i = 0; i < q; ++i) {34 o = op(); read(l); read(r);35 if (o) {36 if (p[l] == r) continue;37 s.erase(p[l]); s.erase(r);38 b[p[l]] ^= a[l]; --c[p[l]];39 if (!h.count(b[p[l]])) s.insert(p[l]);40 b[r] ^= a[l]; ++c[r]; p[l] = r;41 if (!h.count(b[r])) s.insert(r);42 } else {43 int ans = 0; static set < int > :: iterator it; it = s.lower_bound(l);44 for (; it != s.end() && *it <= r; it = s.lower_bound(l)) {45 h.insert(b[*it]); ans += c[*it]; s.erase(it);46 } printf("%d\n", ans);47 }48 }49 return 0; 50 }

 

转载于:https://www.cnblogs.com/p0ny/p/8243714.html

你可能感兴趣的文章
web.xml中<load-on-start>n</load-on-satrt>作用
查看>>
python之路---进程
查看>>
python中,如何将字符串转换为数字(将数字转换为整型),字符串的10转换为整型的10,10.5转换为10...
查看>>
1061. Dating (20)
查看>>
第二次实验的感悟
查看>>
【机器学习】一些基本概念及符号系统
查看>>
页面留白问题
查看>>
因为时间少
查看>>
leetcode 【 Best Time to Buy and Sell Stock II 】python 实现
查看>>
推荐15款创建漂亮幻灯片的 jQuery 插件
查看>>
【算法】CRF
查看>>
windows 8 微软拼音输入法
查看>>
Windows UI风格的设计(7)
查看>>
3. 指针的赋值
查看>>
linux小常识
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
聊聊TaskExecutor的spring托管
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
挨踢部落故事汇(13):扬长避短入行Oracle开发
查看>>