ZROI Day1 比赛解题报告

版权原因不提供题面相关信息


前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3,

发现T3暴力很好打,T2想了一想可以用数据结构维护一个贪心(感觉我比较能乱搞的只有数据结构)然后码码码,回来看T1还是没什么感觉,随手打了30pts暴力....然后就写炸了,90-->60,真的太菜了

A

现在看确实像是提高难度,有几个显然的性质考场上全都没想到...

  1. 若用\(bit(x)\)表示x在二进制下1的个数,则\(bit(x\) \(xor\) \(y) \%2=(bit(x)+bit(y))\%2\)

  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 比赛解题报告的更多相关文章

  1. ZROI-Day2比赛解题报告

    ZROIDay2-比赛解题报告 版权原因不提供题面信息 序 这几天作息有点鬼畜,虽然昨晚很晚睡但是早上精神还不错,看到题发现T1很友好?T2woc这暴力都好难打?T3多项式?!这样下去比赛会不会出现更 ...

  2. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  3. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  4. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  5. 「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 ...

  6. Day1下午解题报告

    预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...

  7. Day1上午解题报告

    预计分数:100+60+0=160 实际分数:100+30+20=150 T1立方数(cubic) 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数 ...

  8. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

  9. 学大伟业Day1解题报告

    学大伟业Day1解题报告 张炳琪 一.   时间分配 T1:30分钟  T2: 60分钟  T3:100分钟 二.答题情况及错因 T1:100         T2:55             T3 ...

随机推荐

  1. js怎么动态加载js文件(JavaScript性能优化篇)

    下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 [基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完 ...

  2. js的dom操作(整理)(转)

    js的dom操作整理(整理)(转) 一.总结 一句话总结: dom操作有用原生js的dom操作,也可以用对js封装过的jquery等插件来来更加方便的进行dom操作 1.dom是什么? 对于JavaS ...

  3. PPT:很多文字如何排版?(PPT如何美化?)

    1.加入图标.形状(或者加入图片和色块搭配) 2.提取关键词作为标题(这个很重要) 下面看下示例: 这个是没修改前 修改后: 相信大家都会喜欢第二张吧 再看一个: 最近在学做PPT,有点上瘾了,哈哈哈 ...

  4. rest-assured学习资料

    rest-assured 使用指南 https://blog.csdn.net/wx19900503/article/details/54944841/

  5. [Java]简单计算下一段Java代码段运行了多少秒

    long startTime = System.currentTimeMillis(); ...... long endTime = System.currentTimeMillis(); logge ...

  6. 前端知识点回顾——Nodejs

    Node.js 事件循环机制 setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数,和setTimeout(fn,0 ...

  7. Android省电和提高效率

    一.Android省电开发之性能优化 电量优化 Android应用开发中的网络.定位.传感器等都是比较耗电的特性,我们应该正确使用API来有效降低应用的耗电量. 1.BroadcastReceiver ...

  8. linux(redhat)安装jdk1.8

    第一步:下载Linux环境下的jdk1.8文件 我的Linux是32位的,因此我下载jdk-8u144-linux-i586.tar.gz文件. 下载链接地址:http://www.oracle.co ...

  9. go命令行参数

    go命令行参数例子: package main import( "fmt" "os" "strings" ) func main(){ wh ...

  10. 链接Linux工具(SecureCRT)

    SecureCRT下载 点我下载 http://download.csdn.net/download/weixin_39549656/10207279 安装 先运行注册机 链接 输入密码 出现以下界面 ...