19_03_26校内训练[魔法卡片]

题意

有n张有序的卡片,每张卡片上恰有[1,m]中的每一个数,数字写在正面或反面。每次询问区间[l,r],你可以将卡片上下颠倒,问区间中数字在卡片上方的并的平方和最大是多少。q,n*m≤1,000,000。


 

思考

一个很重要的性质,若区间长度≥log m+1,则答案为12+22+33+...+m2。

为什么?可以动态地观察。对于没有出现的数字集合,当前卡片上的数字至少有一半的数字出现在正面或者是反面,因此每次你可以将未出现的数字的数量至少减少一半。每次重复上次操作。

对于长度很小的,我们暴力初始化答案。可以发现,若我们强制不选某一个数字,则一定只有一种方法,即每张卡片有它的均朝下。

因此最多只有m种方案(可能有重复的)。同时,若区间中的方案数<pow(2,区间长度),必然有方法使得所有数字都至少有一个在上方。


 

不需要代码的代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 const ll maxn=1E6+5;
 5 ll min(ll x,ll y){return x<y?x:y;}
 6 ll n,m,q,x,y,g,f[maxn][20],vis[maxn],ti,sum[maxn],v[maxn],bel[maxn];
 7 vector<int>a[maxn];
 8 int main()
 9 {
10     ios::sync_with_stdio(false);
11     cin>>n>>m>>q;
12     for(int i=1;i<=m;++i)g+=i*i;
13     for(int i=1;i<=n;++i)
14     {
15         cin>>x;
16         for(int j=0;j<=m;++j)a[i].push_back(0);
17         for(int j=1;j<=x;++j)
18         {
19             cin>>y;
20             a[i][y]=1;
21         }
22     }
23     for(int l=1;l<=n;++l)
24     {
25         for(int i=1;i<=m;++i)bel[i]=0;
26         for(int r=l;r<=min(n,l+19);++r)
27         {
28             ++ti;
29             if(l!=r&&f[l][r-l]==g){f[l][r-l+1]=g;continue;}
30             int cur=1<<(r-l+1);
31             for(int i=1;i<=m;++i)
32             {
33                 if(a[r][i])bel[i]|=1<<(r-l);//1或0其实是等价的 
34                 if(vis[bel[i]]!=ti)
35                 {
36                     vis[bel[i]]=ti;
37                     sum[bel[i]]=0;
38                     --cur;
39                 }
40             }
41             if(cur>0)f[l][r-l+1]=g;
42             else
43             {
44                 for(int i=1;i<=m;++i)sum[bel[i]]+=i*i;
45                 for(int i=1;i<=m;++i)f[l][r-l+1]=max(f[l][r-l+1],g-sum[bel[i]]);
46             }
47         }
48     }
49     while(q--)
50     {
51         cin>>x>>y;
52         if(x>y)swap(x,y);
53         if(y-x+1>=20)cout<<g<<endl;
54         else cout<<f[x][y-x+1]<<endl;
55     }
56     return 0;
57 }
View Code

 

转载于:https://www.cnblogs.com/GreenDuck/p/10601539.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 静态图片引入

https://blog.csdn.net/weixin_33862188/article/details/93325502

c:if test=/c:if 使用

1、页面引用<%taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c"%> 2、整形判断&#xff1a; <c:if test"${TEST 1}"> </c:if> 3、判断非空&#xff1a; <c:if test"${empty TEST}"> TEST为空 <…

CSS3笔记之基础篇(三)文字与字体

要点一、text-overflow与word-wrap text-overflow&#xff1a;设置是否使用一个省略标记&#xff08;...&#xff09;标示对象内文本的溢出。 word-wrap&#xff1a;设置文本行为&#xff0c;当前行超过指定容器的边界时是否断开转行。 语法如下&#xff1a; 注意&#xff1…

XV6操作系统代码阅读心得(二):进程

1. 进程的基本概念 从抽象的意义来说&#xff0c;进程是指一个正在运行的程序的实例&#xff0c;而线程是一个CPU指令执行流的最小单位。进程是操作系统资源分配的最小单位&#xff0c;线程是操作系统中调度的最小单位。从实现的角度上讲&#xff0c;XV6系统中只实现了进程&…

webservices

https://blog.csdn.net/VitaminZH/article/details/81123571

.Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

一、简介 本篇我们将会把商城的服务部署到k8s中&#xff0c;同时变化的还有以下两个地方&#xff1a; 1.不再使用Consul做服务的注册和发现&#xff0c;转而使用k8s-dns来实现。 2.不再使用Ocelot作为业务网关&#xff0c;使用Traefik来实现。 正如上面所讲&#xff0c;服务发现…

HTML、CSS知识点总结,浅显易懂。

一&#xff0c;htmlcss基础 1-1 Html和CSS的关系 学习web前端开发基础技术需要掌握&#xff1a;HTML、CSS、JavaScript语言。下面我们就来了解下这三门技术都是用来实现什么的&#xff1a; 1. HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息&#xf…

Thinking in Java 源代码 source code 在IDEA上运行

参考我52的文章&#xff1a;https://www.52pojie.cn/thread-912471-1-1.html 转载于:https://www.cnblogs.com/AI-Cobe/p/10605434.html

CSS知识体系图谱

转自&#xff1a;https://blog.csdn.net/A13330069275/article/details/78448415

python2 pip安装包等出现各种编码错误UnicodeDecodeError: 'ascii'(/或者utf-8) codec can't decode byte 0xd2......

1.问题描述&#xff1a; python2环境&#xff0c;pip安装包时报错UnicodeDecodeError: ascii(/或者utf-8) codec cant decode byte 0xd2... 类似如下情况 2.原因分析 一开始依据网上给出的教程修改python安装路径下的各种文件&#xff0c;添加各种编码&#xff0c;始终无法解决…

mybatis自动生成代码

https://blog.csdn.net/qq_31169429/article/details/89137896

leetcood学习笔记-111-二叉树的最小深度

题目描述&#xff1a; 第一次提交&#xff1a; class Solution(object):def minDepth(self, root):""":type root: TreeNode:rtype: int"""if not root:return 0if root.left and root.right:return min(self.minDepth(root.left)1,self.minDept…

深入浅析HTML5中的article和section的区别

在HTML5中&#xff0c;为了使文档的结构更加清晰明确&#xff0c;追加了几个与页眉、页脚、内容区块等文档结构相关联的结构元素。内容区块是指将HTML页面按逻辑分割后 的单位。例如对于书籍来说&#xff0c;章、节可以称为内容区块&#xff1b;对于博客网站来说&#xff0c;导…

IPV6 简单总结

1. 转帖别人的内容 来源&#xff1a;https://www.2cto.com/net/201112/114937.html 2. 本地用IPV6单播地址 (包括链路本地单播地址 和 站点本地单播地址) 2.1 链路本地单播地址 规定了链路本地和站点本地两种类型的本地使用单播地址。链路本地地址用在单链路上&#xff0c; 而…

源码分析

https://blog.csdn.net/taifei/article/details/73546836

面向对象第一单元总结

一、对面向对象的理解 有位同学给java的面向对象做了一个形象生动的类比&#xff0c;我觉得很有道理&#xff0c;大概按我的理解如下&#xff1a; 结构的形成看图之前&#xff0c;我们要先明白&#xff0c;世界上是先有了实体&#xff0c;才有了一步步抽象至以上的体系结构&…

理解HTML语义化

1、什么是HTML语义化&#xff1f; <基本上都是围绕着几个主要的标签&#xff0c;像标题&#xff08;H1~H6&#xff09;、列表&#xff08;li&#xff09;、强调&#xff08;strong em&#xff09;等等> 根据内容的结构化&#xff08;内容语义化&#xff09;&#xff0c;…

maven上传命令

mvn deploy:deploy-file -DgroupIdcom.oracle -DartifactIdojdbc8 -Dversion12.2.0.1 -Dpackagingjar -DfileC:\Users\Admin\Desktop\ojdbc8.jar -Durlhttp://116.247.107.83:8081/repository/maven-releases/ -DrepositoryIdmy-nexus-releases

cocos2dx 开启控制台

打开 SimulatorWin.cpp 把这句启用&#xff1a; #define SIMULATOR_WITH_CONSOLE_AND_MENU 1 这句本来因为#define隐藏了转载于:https://www.cnblogs.com/mingfuqishi/p/9774301.html

网页编排规则

所谓大纲&#xff0c;简单来说就是文档中各内容区块的结构编排。可以分为显式编排和隐式编排2种方式。 显式编排&#xff1a;明确使用section元素创建文档结构&#xff0c;在每个内容区块内使用标题 隐式编排&#xff1a;不明确使用section等元素&#xff0c;根据页面中所书写的…