首页 > 其他分享 >24暑假集训day2下午

24暑假集训day2下午

时间:2024-08-03 17:17:49浏览次数:11  
标签:24 std ch cout int day2 cin include 集训

下午

内容:STL 差分前缀和倍增

1. STL

#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdio>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
using namespace std;
void text(){
	vector<int>v;
	
	vector<int>A(5);
	
	vector<int>B(5,3);
        
	vector<int>C={1,2,3};
        
	for(vector<int>::iterator it=A.begin();it!=A.end();it++)cout<<*it<<" ";
	puts("");
        
	for(auto it:B)cout<<it<<" ";
	puts("");
	
	for(int i=0;i<(int)C.size();i++)cout<<C[i]<<" ";
	puts("");
      
	int n;
	cin >> n;
	v.resize(100);
	
	cout<<(int)v.size()<<"\n";//unsigned
	
	cout<<(int)v.capacity()<<"\n";
	
	for(int i=1;i<=n;i++)
		v.push_back(i);
	
	cout<<(int)v.size()<<"\n";//unsigned
	
	cout<<(int)v.capacity()<<"\n";
	
	v.shrink_to_fit();
	
	cout<<(int)v.capacity()<<"\n";
	
	v.push_back(2);
	
	cout<<(int)v.size()<<"\n";
	
	cout<<(int)v.capacity()<<"\n";
	
	v.clear();
	
	cout<<(int)v.capacity()<<"\n";
	
	vector<int>().swap(v);
	
	cout<<(int)v.capacity()<<"\n";
}

namespace basic
{
    basic_string<int>v;
    void test()
    {
        int n;
        cin >> n;
        v.resize(100);
        
        cout<<(int)v.size()<<"\n";//unsigned
        
        cout<<(int)v.capacity()<<"\n";
        
        for(int i=1;i<=n;i++)
            v.push_back(i);
        
        cout<<(int)v.size()<<"\n";//unsigned
        
        cout<<(int)v.capacity()<<"\n";
        
        v.shrink_to_fit();
        
        cout<<(int)v.capacity()<<"\n";
        
        v.push_back(2);
        
        cout<<(int)v.size()<<"\n";
        
        cout<<(int)v.capacity()<<"\n";
        
        v.clear();
        
        cout<<(int)v.capacity()<<"\n";
        
        basic_string<int>().swap(v);
        
        cout<<(int)v.capacity()<<"\n";
        
        basic_string<int>A={2,3,4};
        
        basic_string<int>B={2,3,4};
        
        for(auto it:A)cout<<it<<" ";
        puts("");
        
        A=A+B;
        
        for(auto it:A)cout<<it<<" ";
        puts("");
        
        //string 
        
        cout<<A.find({4,2})<<"\n"; 
        
        
    }
}
namespace se
{
    set<int>A;
    multiset<int>B;//set如果插入重复的元素会自动销毁 , 而multiset不会
    void test()
    {
        for(int i=1;i<=3;i++)
        {
            A.insert(i);//pair <bool,iterator>
            A.insert(i);
            
            B.insert(i);//指针 iterator  
            B.insert(i);
        }
        for(auto it:A)cout<<it<<" ";
        puts("");
        
        for(auto it:B)cout<<it<<" ";
        puts("");
        
        multiset<int>::iterator x=B.lower_bound(0);
        
        multiset<int>::iterator y=B.find(2);
        
        B.erase(x);
        
        for(auto it:B)cout<<it<<" ";
        puts("");
        
        B.erase(3);
        
        for(auto it:B)cout<<it<<" ";
        puts("");
        
        cout<<(int)B.size()<<"\n";
        
        cout<<(int)B.count(2)<<"\n";
        
        A.clear(),B.clear();
        //不能数组下标访问。 
        
    }
}
namespace ma
{
    map<int,int>A;
    unordered_map<int,int>B;
    void test()
    {
        for(int i=1;i<=3;i++)A[i]=i-1,B[i]=i-1;
        
        for(auto it:A)cout<<it.first<<" "<<it.second<<"\n";
        puts("");
        
        auto it=A.find(2);//key 
        
        cout<<A[4]<<"\n";
        
        A.clear(),B.clear();
        
    }
}
namespace bit
{
    bitset<10>bit,bb;
    void test()
    {
        bit[5]=1;
        cout<<bit<<"\n";
        
        bit.flip();
        bit<<=3;
        cout<<bit<<"\n";
        
        bb[1]=1;
        bb[4]=1;
        
        cout<<bb<<"\n";
        bit^=bb;
        cout<<bit<<"\n";
        
        int A=bit._Find_first();
        cout<<A<<"\n";
        
        cout<<bit._Find_next(A)<<"\n";
        
        
    }
}
int main(){
	vector<int> a = {1,2,3};
	for(auto it:a){
		cout << it << " ";
	} 
	text();
	
	basic::test();
	basic_string<int>aa = {1, 2, 3};//头文件在iostream 
	for(auto it:aa){
		cout << it << " ";
	} 
	
	return 0;
}

2. 差分前缀和

不难,可以解决区间问题

T1 求区间和

std:

#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdio>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
using namespace std;
const int MAXX = 1e5 + 10;
int a[MAXX], n; 
int main(){
	cin >> n;
	for(int i = 1;i <= n;i++){
		int x;
		cin >> x;
		a[i] = x + a[i - 1];
	}
	int q;
	cin >> q;
	while(q--){
		int l, r;
		cin >> l >> r;
		cout << a[r] - a[l - 1] << '\n';
	}
	return 0;
}

记录


差分

实现:对于每个区间 \([l, r]\),让 \(a_l\) 加上 \(v\),\(a_r+1\) 减去 \(v\)。

最大加权矩形

给定一个 \(n \cdot n\) 的矩形,询问这个矩形内部和最大的一个子子矩形,这个子矩形的和是多少?
\(n ≤ 120\)

std:

const int xx=1005;
int n,q;
ll a[xx][xx];
int main(){
	n=read();
	for(int i=l;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=read();
	ll ma=0;
	for(int x=1;x<=n;x++)
		for(int y=1;y<=n;y++)
			for(int i=x;i<=n;i++)
				for(int j=y;j<=n;j++)
					ma=max(ma,a[i][j]+a[x-1][y-1]-a[i][y-1]-a[x-1][j]);
	cout<<ma<<"\n";
	return 0;
}

二维数组前缀和

T2 地毯

问题简述:
在 \(n\times n\) 的格子上有 \(m\) 个地毯。
给出这些地毯的信息,问每个点被多少个地毯覆盖。

std:

#include <iostream>

#define maxn 1005

int n,m,a[maxn][maxn];

int main(){
    
    std::cin.tie(0)->sync_with_stdio(0);
    
    std::cin >> n >> m;
    for (int i = 1;i <= m;i++){
        
        int x1,y1,x2,y2;
        
        std::cin >> x1 >> y1 >> x2 >> y2;
        for (int j = x1;j <= x2;j++)
            for (int k = y1;k <= y2;k++)
                a[j][k]++;
        
    }
    for (int i = 1;i <= n;i++){
        for (int j = 1;j <= n;j++)
            std::cout << a[i][j] << ' ';
        std::cout << '\n';
        
    }
    
    return 0;
}

记录


倍增(ST 表)

可解决的问题:区间极值

问题简述:给定一个长度为 \(N\) 的数列,和 $ M $ 次询问,求出每一次询问的区间内数字的最大值。

std:

#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdio>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
const int MAXN = 100005;
int n, m;
int a[MAXN], f[MAXN][21];
int main(){
	n = read(), m = read();
	for(int i = 1;i <= n;i++){
		a[i] = read();
		f[i][0] = a[i];
	}
	for(int j = 1;j <= 20;j++){
		for(int i = 1;i <= n;i++){
			if(i + (1 << j) - 1 <= n){
				f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
			}
		}
	}
	while(m--){
		int l = read(), r = read();
		int k = __lg(r - l + 1);
		cout << max(f[l][k], f[r - (1 << k) + 1][k]) << '\n';
	}
	return 0;
}

标签:24,std,ch,cout,int,day2,cin,include,集训
From: https://www.cnblogs.com/yantaiyzy2024/p/18340808

相关文章

  • 24暑假集训day6上午&下午
    DP概念状态、转移方程、初始化先放一张图(相信都能理解:状态、转移方程、初始化的含义,随便引入斐波那契数列的题)入门题Problem1斐波那契数列\[f_i=f_{i-1}+f_{i-2}\]组合数转移方程:\[C(n,m)=C(n-1,m-1)+C(n-1,m)\]\[C(n,0)=1\]杨辉三角:\[f[i][j]=f[i-1][j-1]+f[i-1]......
  • 24暑假集训day5下午
    DFS本质:一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。该算法讲解时常常与BFS并列,但两者除了都能遍历图的连通块以外,用途完全不同,很少有能混用两种算法的情况。关键:递归调用自身对其访问过的点打上访问标记,在遍历图时跳过已打过标记的点,以......
  • 24暑假集训day5上午
    图论差分约束有\(......
  • 24暑假集训day4上午&下午
    基础图论图的存储方式无向边可以拆成两条有向边1.邻接矩阵邻接矩阵:若\(......
  • Day 8.2 NOIP2024 模拟赛 总结
    Day8.2NOIP模拟赛总结T1T1赛时打表输出发现了等差数列的性质(好像不需要打表也能知道),然后我码完T2过后剩不到2个小时了,于是连T3T4暴力都没码就过来推了,但也没推出来,时间倒是耽误了不少,剩一个小时的时候去开始去码后面的暴力了。T2水题一道,做法,性质全给了。只不过比较玄学的......
  • 20240803题解
    话说T3都把式子推出来了结果忘记差分约束怎么写了。光线(light)题面:有\(n\)个玻璃板,第\(i\)个玻璃板的透光率为\(a_i\%\),反射率为\(b_i\%\),有大小为\(1\)个单位的一束光从第\(1\)个玻璃板开始,有多少光能穿透\(n\)层玻璃板。题解:考虑\(n=2\)时,可以简单算出两个玻璃板组合后的反......
  • 【笔记】动态规划选讲:凸优化技术大赏 2024.8.3
    如果您是搜索引擎搜进来的。很抱歉,没有您需要搜索的题目的题解。典题\(n\)个物品的背包,重量在\(1\sim4\)之间,价值在\(1\sim10^9\)之间。\(n\leq10^5\)。Minkowski和会遇到不连续的问题。不妨按照\(i\bmod12\)划分dp数组,每个剩余系都是凸的。枚举拿了\(......
  • IPC-6012F-CN-中文版\英文版,2024 刚性印制板的鉴定及性能规范
    IPC-6012F-CN-中文版,2024刚性印制板的鉴定及性能规范链接:https://pan.baidu.com/s/1z1x5JPmcRHzeIQgMsMQRxg提取码:1234https://share.weiyun.com/s7XNX9gE 2023年10月,IPC-6012发布了最新版F版。与以往版本不同的是,F版中国成立了分技术组,收集,讨论和提交了大量制修订的意......
  • Day 8.1 NOIP2024 模拟赛 总结
    ​Day8.1NOIP2024模拟赛总结T1开赛后首先是码了本题的暴力,想了想之后只是感觉这个结构很像二叉树,然后没有细想,想着先码完后面的暴力再回来。T2Subtask2就是简单推性质,优化一下循环枚举顺序就可以了。当时想Subtask1的时候,本身是考虑枚举每一个点然后暴力向外拓展,时间......
  • docker安装zabbix 20240803
    宿主机IP:192.168.177.1281、下载数据库:dockerpullmysql:5.7 2、下载支持数据库的zabbix:dockerpullzabbix/zabbix-server-mysql:centos-latest 3、下载web容器:dockerpullzabbix/zabbix-web-nginx-mysql:latest  4、下载java监控:dockerpullzabbix/z......