首页 > TAG信息列表 > minn

递归

题目1 不用判断不用循环实现1+2+...+n 代码 #include<bits/stdc++.h> using namespace std; int sumNums(int n){ int sum = 0; n && (sum = n + sumNums(n-1)); //为0时短路不执行递归,终止条件 return sum; } int main(){ int n; cin >> n; cout << sumNums(n); }

线段树的奇幻科技——线段树上二分

线段树如果加上一个操作,询问在 \([l,r]\) 中第一个大于或小于某个数的位置,你会怎么做。 显然的一种想法是,维护一个区间 \(\min,\max\) 然后二分长度,每次 Query。但是明显是两只 \(\log\) 的,太慢啦,有没有快一点的方法呢。当然有。 还是维护区间 \(\min, \max\) 我们假设我们要找到

C20220712T3 牛半仙的妹子Tree

给定一棵树,要求执行3种操作: 给树上某一结点涂色,从下一次操作起每一次向周围传染一个单位。 树上所有点变为正常 询问某个点是否被感染。 \(n,m\leq 10^5\)。 首先想到暴力做法,用栈维护现在被感染的节点以及感染时间,那么对于操作1,2都好解决,对于操作3需要遍历栈并求出是否有节点

2020年9月乙组 最大圆弧

首先,如果将题目的“圆环”改成“数组”,相信大家都会做,就是如下 int sum=0,maxn=0;//sum更新最大值 for(int i = 1;i <= n;i++){ scanf("%d",&a); if(sum < 0)sum = 0;//当sum小于零时,不如啥都不选 sum += a; maxn = max(maxn,sum); } printf("%d\n",maxn); 但是此题是一个环

2016年NOIP普及组 买铅笔

试题分析:本题重在计算每种笔最少买多少盒,然后进行比较,寻找最小即可。 注意:minn变量开大,不然会wa。  

[纪中][线段树]矮人排队

题目大意 给定一个数列。 有两个操作 一,调换队列中下标为 \(x\) 和 \(y\) 的元素的位置; 二,询问一个数列\(D\)的 \(a, a+1, a+2......b\) 的一种排列方式为该队列的子队列。 解析 一,显然,取这个数列的每个元素所对应的下标的最大值 \(maxt\) 和 最小值 \(mint\)。 当 \(maxt - mint

Level 1 (day 5)

第一题 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 个人题解:线性DP 代码: class Solution { public: int maxProfit(vector<int>& prices) { int minn=INT_MAX,maxx=0; for(auto x:prices){ maxx=max(maxx,x-minn)

CF363B Fence 题解

题意简述 给定一个长为 \(n\) 的序列,要求截取一段长度为 \(k\) 的连续子序列,使这段子序列的和最小。 解题思路 如果每次都去枚举这个数之后 \(k\) 个数的和再进行比较,那么时间复杂度就会飙升到 \(O(n^2)\)。 数据要求 \(1 \leqslant n \leqslant 1.5 \times 10^5\),肯定过不了。

dls的数据结构_习题1

将(i, a[i])当作点,对a[i]这个维度扫描,在i这个维度上面建立扫描线 #include<bits/stdc++.h> using namespace std; const int N = 2e5+10; array<int, 4> que[N]; array<int, 2> a[N]; // 线段树维护树链剖剖分的dfs序 struct Node{ int l, r; int minn; }tr[4*N]; vo

洛谷P2880 [USACO07JAN] Balanced Lineup G(树状数组/线段树)

维护区间最值的模板题。 1.树状数组 1 #include<bits/stdc++.h> 2 //树状数组做法 3 using namespace std; 4 const int N=5e4+10; 5 int m,ma[N],mi[N],n,c[N]; 6 7 int lowbit(int x){ 8 return x&(-x); 9 } 10 11 void ins(int x,int v){ 12 while(x<=n){

P1967 [NOIP2013 提高组] 货车运输

首先能想到floyed暴力做法 60分是没问题的 进一步 两点之间路径可能会有多条 但是我们只用找到路径上最长边最小的那条 但是因为有多个询问 所以我们不能单方面考虑两个点 而是考虑很多对两个点 考虑建立最大生成树 这样的解一定是最优的!!!很巧妙 最后找两点之间的最短的那条边 用

互评成绩

题目详情 - L2-015 互评成绩 (25 分) (pintia.cn) 结构体排序: #include<iostream> #include<algorithm> using namespace std; const int N=1e5+10; double a[N]; bool cmp(double x,double y) { return x<y; } int main(){ int n,m,q,k=1; cin>>n>&g

CF940E Cashback 题解

这道题好像很烦,我第一眼看过去确实没有任何思路。 但是仔细分析题目后,我们会发现: \(c=1\) 时,答案为 0,但是好像没有这个点? \(c > n\) 时,答案为序列总和。 \(c = n\) 时,答案为序列总和减去最小值。 \(1 < c < n\) 且 \(n < 2 \times c\) 时,此时序列只能分为一段,而别的序列我们可以

【2022 省选训练赛 Contest 15 C】老园丁与小司机(左偏树)(DP)

老园丁与小司机 题目链接:2022 省选训练赛 Contest 15 C 题目大意 给你一棵树,然后有一些路径(满足路径的两端的点的 LCA 是其中之一),每个路径有选的费用。 然后要你花费最小的费用使得每个边都在选的至少一条路径中,或输出无解。 思路 考虑到路径的特别,我们可以有这么一种 DP。 设 \(f

【NOI2022省选挑战赛 Contest10 B】早该砍砍了(笛卡尔树)(DP)

早该砍砍了 题目链接:NOI2022省选挑战赛 Contest10 B 题目大意 给你一个序列,保证任意两个位置的数都不相同,你每次可以选择一个区间把里面的数都变成其中的最小值,问你操作若干次(可以不操作)之后序列的样子有多少种。 思路 考虑求出序列每个位置的“管辖范围”(这是这段范围里面的区间

【priority_queue】滑动窗口

题目链接 #10175. 「一本通 5.5 例 1」滑动窗口 - 题目 - LibreOJ (loj.ac) 前言 之前已经写过这道题的题解(2022GDUT寒假专题学习-1 B,F,I,J题 - blockche - 博客园 (cnblogs.com)),当时用的是 deque 模拟单调队列的方法来维护最大值,但后来突然发现其实可以直接用 priority_queue

Codeforces Round #581 (Div. 2)

Codeforces Round #581 (Div. 2) A # include <bits/stdc++.h>using namespace std;​int main(){ string s; cin>>s; int len=s.size(); int ans=0; int flag=0; for(int i=0;i<len;i++){ if(s[i]=='1'){ if(a

洛谷P2392 kkksc03考前临时抱佛脚

题目链接:https://www.luogu.com.cn/problem/P2392 两种思路: 1、常规搜索 2.、dp0/1背包问题 这里本人只提供第一种思路,因为第二种思路我也不会(怎么就成了0/1背包)? 第一种思路具体内容: 这里知道我们在题目中有左右两个脑子,那就本题而言 我们在做某个学科的题目时,无非就是利用两个脑

搜索与回溯:工作分配问题(job)

【题目描述】 设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。 输入 第一行有1个正整数n (1≤n≤20)。接下来的n行,每

搜索与回溯:装载问题(load)

【题目描述】 有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。 输入 第一行有2个正整数n和c。n是集装箱数,c是轮船的载重量。接下来的1行中有n个正整数,表示集装

搜索与回溯:装载问题(load)

题目描述 有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。 输入 第一行有2个正整数n和c。n是集装箱数,c是轮船的载重量。接下来的1行中有n个正整数,表示集装箱的

POJ 2823 Sliding Window

题目链接:POJ 2823 Sliding Window 题目大意: 题解: 用两个双向队列\(deque\)模拟单调队列来维护区间,一个单调递增,一个单调递减,使当前区间的最大最小值分别出现在两个队列的队首。 #include <cstdio> #include <deque> #include <iostream> using namespace std; int n, k, a[10000

信息学奥赛一本通 1407:笨小猴 | 1851:【08NOIP提高组】笨小猴 | OpenJudge NOI 1.9 06 | 洛谷 P1125 [NOIP2008 提高组] 笨小猴

【题目链接】 ybt 1407:笨小猴 ybt 1851:【08NOIP提高组】笨小猴 OpenJudge NOI 1.9 06:笨小猴 洛谷 P1125 [NOIP2008 提高组] 笨小猴 【题目考点】 1. 散列存储 2. 质数 3. 求最值 【解题思路】 设数组chNum记录单词中每个字母出现的次数。 设函数判断一个数是不是质数。 输入

<图算法 pta> 1003 Emergency (25 分)

  今天写完这道题,感觉自己理论实践衔接的还是不够呀,思想会,代码不会打;从易到难,慢慢开始吧~   其实代码参考(chao)了《算法笔记》   这是一道对dijkstra算法进行应用的题目;其中新增了点权,边权应该是老朋友,但问题是题目要求最短路径数量与最大点权。如何在算法运行时维护这两个值是

300. 最长递增子序列

300. 最长递增子序列 一开始想的是深度遍历加剪枝,然后就时间超时了,判断能否加入最长递增子序列,代码如下: 查看代码 class Solution { public: int lengthOfLIS(vector<int>& nums) { int result = 0; int minn = INT_MIN; int temp = 0; res