首页 > 其他分享 >最近做题小结

最近做题小结

时间:2024-10-23 10:47:28浏览次数:2  
标签:二分 cnt num int sum 最近 ans 小结

https://www.luogu.com.cn/problem/AT_abc373_e

这道题是个二分 然后标答是两个二分 我用的树组+二分
需要对代数式进行拆分才能得到
我一开始看错题目了 看成大于等于他的票的人不多于M就行
然后就很简单 我觉得可以改编下这个题

很明显 最终前m个人一定当选

那么对于每一个人 我们就是尽量求他能不能利用最后的票让自己当选
求这个票的最小值

那我们先进行排序 从小到大排好

对于已经排前M的人来说 我们把他给抹掉 然后让m+1的人变成m位
此时我们对他进行二分判断最小 因为虽然我已经排前m了 但是
票数多太多的情况下 还是会被反超

对于这个抹掉可以写一个change函数 然后 后面再加上去就行

难就难在这个树状树组的写法上

现在分情况讨论 如果我已经前m位了 现在我删掉自己
二分了一个 ans可以进前m位的第2假设m为5 此时 假设多的票数总共是sum
sum-ans要让3 4 5 不可以反超 则有后面的总和加上sum-ans小于等于3*(ans+ai)这样就可以做到了

说白了就是后面的所有票数要小于人数*(ai+ans+1)

不能等于

这种求和用树组是log操作 明显可以做 对于查找位置 可以
内置lowerbound upperbound进行查找

为了查多少名不是通过low upp 因为他们返回的是数值
所以必须开再一开一个树组进行访问

struct Tree{
	int tr[range];
    void modify(int x,int d)
	{
		int dex=lower_bound(num+1,num+1+cnt,x)-num;
		//位置 xx
		for(int i=dex;i<=cnt;i+=i&-i)
		{
			tr[i]+=d;
		}
//		for(int i=dex;i<=cnt;i+=i&-i)
//		{
//			cout<<tr[i]<<" "<<i<<" "<<x<<" "<<dex<<endl;
//		}
	}
     int  query(int x)
	{
		int res=0;
		int dex=upper_bound(num+1,num+1+cnt,x)-num-1;
//		cout<<dex;
//		for(int i=dex;i>=0;i-=i&-i)
		for(int i=dex;i;i-=i&-i)
		{
		res+=tr[i];
		}	
//		cout<<"res:"<<res<<endl;
		return res;
	}	
}t1,t2;

挺不容易的

考虑建树 只需要 枚举前m位


	k=k-sum;
	sort(num+1,num+1+cnt);
	cnt=unique(num+1,num+1+cnt)-num-1;
	sort(a+1,a+1+n,cmp);
//离散 
	for(int i=1;i<=m;i++)
	{
		t1.modify(a[i].x,a[i].x);
		t2.modify(a[i].x,1);
	}

后面删除:

if(i<=m)
		{
	    t1.modify(a[i].x,-a[i].x);
        t2.modify(a[i].x,-1);
		t1.modify(a[m+1].x,a[m+1].x);
		t2.modify(a[m+1].x,1);	
		}		

这题就这样了 难!

标签:二分,cnt,num,int,sum,最近,ans,小结
From: https://www.cnblogs.com/LteShuai/p/18495916

相关文章

  • [考试总结] 2024.10.23 最近的几场考试
    从2024.10.14考图论起。2024.10.14考图论T1转前缀和,跑差分约束或者贪心,贪心用[树状数组、并查集](?)实现。注意前缀和的额外限制(差分约束)、贪心实现的正确性。T2相当于连无向边,两点连通就能得到差。注意到没必要连接两个已经连通的点,于是会形成一棵树。带权并查集或者用......
  • Day22--下标越界及小结
    Day22--下标越界及小结数组的四个基本特点:长度是确定的,一旦被创建,大小不可改变。元素必须是相同类型,不允许混合类型。元素可以是任何数据类型,包括基本类型和引用类型。在Java中,数组对象在堆中。数组边界数组边界特点如下:下标的合法区间为[0,length-1],如果越界就......
  • 「Day-4 提高笔记-LCA最近公共祖先」
    #include<iostream>usingnamespacestd;constintMAXN=5*1e5+5;structnode{ intto,next;}e[MAXN*2];intf[MAXN][20],dp[MAXN];//f[x][i]表示x的第2^i个节点的编号inth[MAXN*2],tot=0;intn,m,s;voidadd(intx,inty){ e[++tot]={y,h[x]}; h......
  • 关于selenium 最近的更新记录
    1、导入元素操作方式有所变动,故导入的内容也要变更:fromselenium.webdriver.common.byimportBy2、获取元素的语句语句:driver.find_element(By.操作方式,"值")如获取ID:driver.find_element(By.ID,"值")获取类名:driver.find_element(By.CLASS_NAME,"值")获取CSS样式:driver......
  • c语言小结——使电脑关机,输入正确信息取消关机
    一:代码展示 #include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){charinput[20]={0};system("shutdown-s-t60");agin:printf("请输入:我是帅哥,否则电脑将在1分钟后关机\n");scanf("%s",inpu......
  • Leetcode 1926. 迷宫中离入口最近的出口
    1.题目基本信息1.1.题目描述给你一个mxn的迷宫矩阵maze(下标从0开始),矩阵中有空格子(用‘.’表示)和墙(用‘+’表示)。同时给你迷宫的入口entrance,用entrance=[entrancerow,entrancecol]表示你一开始所在格子的行和列。每一步操作,你可以往上,下,左或者右移动一......
  • 最近网站频繁跳转到黑产网站,怀疑是51.la统计代码的问题
    ​     最近我的几个网站,都出现了一个问题,就是访问的时候会莫名其妙的跳转到黑产网站。(由于都是黄du,我就不贴图了)    通过排查了网页代码,发现网页都有一个共同点,就是使用了51.la统计。为什么会怀疑是51la统计代码问题?因为我的网页只有统计代码外没有任何js的情......
  • 代码随想录算法训练营day19| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插
    学习资料:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html****学习记录:235.二叉搜索树的最近公共祖先(加一个函数traversal)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(self,x):#self.val=x......
  • 代码随想录算法训练营day18 |530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数
    学习资料:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html530.二叉搜索树的最小绝对差(双指针法,pre&cur,设置最小差值初始为无穷大,当差值<最小差值就更新最小差值)点击查看代码#Definitionforabinarytreenode.#classTreeNode(object):#def__init__(......
  • 深度学习入门知识点小结
    深度学习(DeepLearning)      简介:             机器学习的分支,是一种以神经网络为架构,对数据进行特征学习是算法      深度学习(DL)与机器学习(ML)的区别:             1.特征提取                  ......