Description GTY召唤了n个人来做实验,GTY家的房子很大,有m个房间一开始所有人都在1号房间里,GTY会命令某人去某个房间等待做实验,或者命令一段区间的房间开始实验,实验会获得一些实验信息点数,点数为房间里的人数,如果一个房间里的一群人已经做过实验了那么这些人将不会增加实验信息点数(不会增加是针对这一群人的,不是对这群人中的每个人,即1,2,3做了实验,1,2再做实验还会增加2点实验点数) Input 第一行两个整数n,m,q(n,m,q<=10^5)表示人数,房间数和操作数 接下…
关于如何判断一个集合是否出现过: 给每个元素随机一个hash权值,然后xor起来即可 插入删除都只需xor 线段树维护区间有效人数和,以及打标记表示这个区间的集合要全部标记为出现过,并把区间内sum值都置0 写hash用了map被虐了TAT #include<cstdio> #include<map> #define N 100010 #define M 200010 inline void read(int&a){char c;while(!(((c=getchar())…
每个房间用一个集合来维护,具体来说,就是给1-n的数每个数一个long long的hash值,往集合S里insert(i),就是S^=HASH[i]:erase(i),也是S^=HASH[i]. 用map/set维护某个集合是否已经做过实验. 分块,对每个块维护一个maxv[i],代表当前该块内的答案值,要注意,若某个房间的集合的vis[S[i]]==true,则它对其所在块没有贡献. 分块相对于线段树/平衡树/树套树的很大的好处,就是思路简单暴力,代码短,常数小,应对范围广,可以方便地扩张.…
3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][Discuss] Description GTY召唤了n个人来做实验,GTY家的房子很大,有m个房间一开始所有人都在1号房间里,GTY会命令某人去某个房间等待做实验,或者命令一段区间的房间开始实验,实验会获得一些实验信息点数,点数为房间里的人数,如果一个房间里的一群人已经做过实验了那么这些人将不会增…
还需要加强分析题目特殊性质,设计对应特殊算法,少想多写大力dfs剪枝不要管MLETLE直接上的能力 红包是一个有艺术细胞的男孩子. 红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦. 一开始,他在纸上画了一棵 nn 个节点的树.但是他觉得这样的画太简单了,体现不出他高超的绘画功底,于是他又额外画上了 kk 条边. 然而他觉得这样画面太复杂,于是想删去一些边使得这个无向图仍然是连通的. 请帮红包求出删边的方案数.两个方案被认为是不同的当且仅当存在一条边在其中一组中被删而另一组中没…
题目: Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不同的)小Ci和j,如果其他的所有小C要么同时是i,j的朋友,要么同时不是i,j朋友的话,这两个小C就很有可能一起去吃饭,成为一对好*友.出于一些未知的原因,ATM需要你帮他求出可能成为好*友的小C的对数. Input 第一行一个数N,M,如题目描述. 接下来M行,每行2个数表示一条无向边. Output 输出可能成为好*友…
hash大法好(@ARZhu):大数相乘及时取模真的是件麻烦事情 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列.当然,他还会不断修改其中的某一项.为了不被他鄙视,你必须要快速并正确地回答完所有问题.注意:只有一个数的数列也是等差数列. Input 第一行包含两个正整数n,m(1<=n,m<=300000),分别表示序列的…
要注重问题的转化和一些结论的推断 题目描述 要致富,先撸树. 一棵树的形状可以简化为一张 $N$ 个点 $M$ 条边的图,由于装备条件限制,你只有撸两次,也就是删去两条边,当这张图不联通时,就意味着树倒了. 现在你想知道有多少种方案能撸倒这棵树. 输入格式 第一行两个正整数 $n,m$ 接下来 $m$ 行,每行两个正整数,表示一条边. 输出格式 输出一个数,表示方案数. 数据规模与约定 对于 $30\%$ 的数据,$1\le N\le 20,1\le M\le40$ 对于$50\%$的数据,$1…
一.Hash 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度. 这个映射函数称做散列函数,存放记录的数组称做散列表. 实现Hash算法的关键:实现hash算法 .解决hash冲突 1.Hash函数 首先来说hash函数,java中对象都已一个hashCode()方法,那为什么还需要hash函数呢?hashCode是在jdk中是有符号int类型,…
关于集合set的去重复,向集合中插入元素 #include<iostream>#include<set>using namespace std;int main(){ set<int>myset; int num; for(int i=0;i<6;i++) { cin>>num; myset.insert(num); } //for(int i=0;i<myset.size();i++) set<int>::iterator te=m…