ZROI Day1 比赛解题报告
ZROI Day1 比赛解题报告
版权原因不提供题面相关信息
序
前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3,
发现T3暴力很好打,T2想了一想可以用数据结构维护一个贪心(感觉我比较能乱搞的只有数据结构)然后码码码,回来看T1还是没什么感觉,随手打了30pts暴力....然后就写炸了,90-->60,真的太菜了
A
现在看确实像是提高难度,有几个显然的性质考场上全都没想到...
若用\(bit(x)\)表示x在二进制下1的个数,则\(bit(x\) \(xor\) \(y) \%2=(bit(x)+bit(y))\%2\)
对于区间\([0,m]\),其中二进制下1的个数为偶数的数的个数x为
- \((m+1)/2\) ---m为奇数
- \(m/2-1+[m\)有偶数个\(1]\) ---m为偶数
所以只要把区间离散化后统计答案即可,对于一个区间,其中的对数为二进制下有奇数个1的数的个数乘以二进制下有偶数个1的数的个数
B
这题也需要几个性质,很容易手推得到做出的贡献是单调的,于是有个朴素的做法是对于每一个偶数数组,我们枚举此时在它后面插入每一个奇数对答案的贡献,即产生的逆序对,然后取各个的最小值加起来,当然要先预处理加在第一个数前面的情况,时间复杂度\(O(N\) \(log\) \(N)\)
正解其实与上面类似,然而我们是枚举每一个奇数,用数据结构维护它的最优贡献
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <queue>
#define ll long long
#define ri register int
using std::min;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=200005;
const int inf=0x7fffffff;
int n;
int a[maxn],pos[maxn];
int L,R,dta;
struct Segment_Tree{
int mi[maxn<<2],tag[maxn<<2];
void build(int now,int l,int r){
mi[now]=inf,tag[now]=0;
if(l==r){
mi[now]=l;
return ;
}
int mid=(l+r)>>1;
build(now<<1,l,mid);
build(now<<1|1,mid+1,r);
mi[now]=min(mi[now<<1],mi[now<<1|1]);
return ;
}
inline void pushdown(int now){
if(tag[now]!=0){
mi[now<<1]+=tag[now];
mi[now<<1|1]+=tag[now];
tag[now<<1]+=tag[now];
tag[now<<1|1]+=tag[now];
tag[now]=0;
}
return ;
}
void update(int now,int l,int r){
if(L<=l&&r<=R){
mi[now]+=dta;
tag[now]+=dta;
return ;
}
int mid=(l+r)>>1;
pushdown(now);
if(L<=mid)update(now<<1,l,mid);
if(mid<R)update(now<<1|1,mid+1,r);
mi[now]=min(mi[now<<1],mi[now<<1|1]);
return ;
}
int query(int now,int l,int r){
if(L<=l&&r<=R){
return mi[now];
}
int mid=(l+r)>>1,ans=inf;
pushdown(now);
if(L<=mid)ans=min(ans,query(now<<1,l,mid));
if(mid<R)ans=min(ans,query(now<<1|1,mid+1,r));
mi[now]=min(mi[now<<1],mi[now<<1|1]);
return ans;
}
}T;
struct BIT{
int b[maxn];
inline void add(int x,int y){
for(ri i=x;i<=y;i+=(i&-i)){
b[i]++;
}
return ;
}
inline int get(int x){
int ans=0;
for(ri i=x;i>0;i-=(i&-i)){
ans+=b[i];
}
return ans;
}
}B;
int main(){
ll ans=0;
read(n);
n=n>>1;
for(ri i=1;i<=n;i++){
read(a[i]);
pos[a[i]]=i;
}
for(ri i=n;i>=1;i--){
ans+=B.get(a[i]);
B.add(a[i],n<<1);
}
T.build(1,0,n);
for(ri i=1;i<=n;i++){
L=0,R=n;
ans+=T.query(1,0,n);//printf("%d\n",ans);
int x=pos[i*2];
L=0,R=x-1,dta=1;
T.update(1,0,n);
L=x,R=n,dta=-1;
T.update(1,0,n);
}
printf("%lld\n",ans);
return 0;
}
C
三重容斥,毒瘤
ZROI Day1 比赛解题报告的更多相关文章
- ZROI-Day2比赛解题报告
ZROIDay2-比赛解题报告 版权原因不提供题面信息 序 这几天作息有点鬼畜,虽然昨晚很晚睡但是早上精神还不错,看到题发现T1很友好?T2woc这暴力都好难打?T3多项式?!这样下去比赛会不会出现更 ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- noip2011提高组day1+day2解题报告
Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...
- 「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
- 「BZOJ1722」「Usaco2006 Mar」Milk Team Select产奶比赛 解题报告
Milk Team Select 产奶比赛 Description Farmer John's N (\(1 \le N \le 500\)) cows are trying to select th ...
- Day1下午解题报告
预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...
- Day1上午解题报告
预计分数:100+60+0=160 实际分数:100+30+20=150 T1立方数(cubic) 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数 ...
- 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...
- 学大伟业Day1解题报告
学大伟业Day1解题报告 张炳琪 一. 时间分配 T1:30分钟 T2: 60分钟 T3:100分钟 二.答题情况及错因 T1:100 T2:55 T3 ...
随机推荐
- LC 583. Delete Operation for Two Strings
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...
- [spring]@Resource和@Autowired区别对比
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...
- Spring-Kafka —— 消费后不提交offset情况的分析总结
最近在使用kafka,过程中遇到了一些疑问,在查阅了一些资料和相关blog之后,关于手动提交offset的问题,做一下总结和记录. 消费端手动提交offset代码如下: /** * 这是手动提交的消费 ...
- bashdb调试shell脚本
http://note.youdao.com/noteshare?id=ef705313b714cf3a17cfe17dc80956a3
- 【Hadoop】Hadoop的数据压缩方式
概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...
- Mybatis batch 批量处理
@Testpublic void batch() throws IOException { InputStream inputStream= Resources.getResourceAsStream ...
- 安装barbican
1.准备数据库 mysql -uroot -p CREATE DATABASE barbican; GRANT ALL PRIVILEGES ON barbican.* TO 'barbican'@' ...
- 二、Linux用户身份
0.介绍: 管理员UID为0:系统的管理员用户. 系统用户UID为1-999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控 ...
- 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发
微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可 ...
- vue-cli按需引入Element UI组件
一.环境 使用vue-cli搭建的环境 二.安装 babel-plugin-component npm install babel-plugin-component -D 三.修改.babelrc文件 ...