zoukankan      html  css  js  c++  java
  • 【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);
    	}
    }
    
  • 相关阅读:
    发送带SMTP身份认证的电子邮件
    将class文件打包成可执行文件
    迈入本本一族
    关于Java的一些 工具,类库,框架......
    Java中用Servlet容器实现程序监听
    用JDOM读写XML
    Firefox丰富多彩的插件
    DIV居中——不大不小的问题
    羽绒外套
    pku1469 COURSES
  • 原文地址:https://www.cnblogs.com/nibabadeboke/p/13498637.html
Copyright © 2011-2022 走看看