• 【GDKOI2014】内存分配


    Description

    Input

    Output
    输出m行,每行一个整数,代表输入中每次程序变化后系统所需要的空闲内存单位数。

    Sample Input
    2 3

    1 4

    1 4

    2 2 1

    2 1 1

    1 1 1

    Sample Output
    2

    3

    1

    Data Constraint
    对于30%的数据,有1<=n,m<=1000

    对于100%的数据,有1<=n,m<=100000

    Hint

    解题思路

    Code

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m,g[200005];
    
    struct nd1{
    	long long x,y;
    	int c,rk;
    }a[200005],f[800005],b[200005];
    bool cmp(nd1 x,nd1 y){return x.y < y.y;}
    void change(int l,int r,int k,int u,long long x,long long y)
    {
    	if (l == r && l == u)
    	{
    		f[k].x = x;
    		f[k].y = y;
    		return;
    	}
    	int mid = l + r >> 1;
    	if (u <= mid) change(l,mid,k << 1,u,x,y);
    	else change(mid + 1,r,k << 1 | 1,u,x,y);
    	f[k].x = f[k << 1].x + f[k << 1 | 1].x;
    	f[k].y = max(f[k << 1].y,f[k << 1 | 1].y - f[k << 1].x);
    }
    int main()
    {
    	int sum = 0;
    	scanf("%d%d",&n,&m);
    	for (int i = 1; i <= n; i++) scanf("%lld%lld",&a[i].x,&a[i].y),a[i].rk = i,b[i] = a[i];
    	for (int i = 1; i <= m; i++) scanf("%d%lld%lld",&a[i + n].c,&a[i + n].x,&a[i + n].y),a[i + n].rk = i + n,b[i + n] = a[i + n];
    	sort(a + 1,a + 1 + n + m,cmp);
    	for (int i = 1; i <= n + m; i++) g[a[i].rk] = i;
    	for (int i = 1; i <= n; i++) change(1,n + m,1,g[b[i].rk],b[i].x,b[i].y);
    	for (int i = 1; i <= m; i++)
    	{
    		change(1,n + m,1,g[b[i + n].c],0,0);
    		change(1,n + m,1,g[b[i + n].rk],b[i + n].x,b[i + n].y);
    		g[b[i + n].c] = g[b[i + n].rk];
    		printf("%lld
    ",f[1].y);
    	}
    }
    
  • 相关阅读:
    autodl3配置深度学习环境
    autodl使用2配置环境
    20220723图生成模型腾讯AI徐挺洋老师(分子生成)
    加班
    打比赛
    错过了一个比较大的编程比赛
    胡思乱想
    没有太复杂
    张远陆虎给从前的自己
    我还是会想
  • 原文地址:https://www.cnblogs.com/nibabadeboke/p/13498637.html
Copyright © 2020-2023  润新知