信息推送(单点更新,求前缀和)

https://codeforces.com/contest/1288/problem/E

题意:n条信息,刚开始顺序为1-n,m次操作,每一次操作将某条信息置顶,其他信息后移

问每一条信息距离顶部最小距离和最大距离。

解法:扩大区间长度为n+m,利用树状数组进行单点更新和求前缀和,另用一个数组记录每一个点位置。

//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <string>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string.h>
#include <vector>
#define ME(x , y) memset(x , y , sizeof(x))
#define SF(n) scanf("%d" , &n)
#define rep(i , n) for(int i = 0 ; i < n ; i ++)
#define INF  0x3f3f3f3f
#define mod 1000000007
#define PI acos(-1)
using namespace std;
typedef long long ll ;
int c[600009];
int ma[300009] , mi[300009];
int l ;
int ans[300009];

int lowerbit(int x)
{
    return x&(-x);
}

void add(int x , int val)
{
    for(int i = x ; i <= l ; i += lowerbit(i))
    {
        c[i] += val ;
    }
}

int getsum(int x)
{
    int ans = 0 ;
    for(int i = x ; i >= 1 ; i -= lowerbit(i))
    {
        ans += c[i];
    }
    return ans ;
}

int main()
{
    int n , m ;
    scanf("%d%d" , &n , &m);
    l = n + m ;
    for(int i = 1 ; i <= n ; i++)
    {
        ans[i] = i + m;
        mi[i] = ma[i] = i ;
        add(i+m , 1);
    }
    for(int i = 0 ; i < m ; i++)
    {
        int x ;
        scanf("%d" , &x);
        mi[x] = 1;
        ma[x] = max(ma[x] , getsum(ans[x]));//每一次移动前查询此时距离。
        add(ans[x] , -1);
        ans[x] = m - i ;//更新位置
        add(ans[x] , 1);
    }
    for(int i = 1 ; i <= n ; i++)//可能存在没有置顶的信息,需要再筛查一遍
    {
        ma[i] = max(ma[i] , getsum(ans[i]));
    }
    for(int i = 1 ; i <= n ; i++)
    {
        cout << mi[i] << " " << ma[i] << endl ;
    }

    return 0 ;
}

原文地址:https://www.cnblogs.com/nonames/p/12238312.html

时间: 2024-07-31 04:30:50

信息推送(单点更新,求前缀和)的相关文章

android后台信息推送调研

android后台信息推送调研 前言 我们已经开发了一个应用,这里称为A应用,类似于天气weather那种.现在的任务就是如果这些A应用有新版本了,或者天气出现比较恶劣的状况,要及时在手机上进行消息的推送,提示有新的应用可以更新了,和天气将要变遭了,提醒用户需要注意的情况.及需要实现消息推送机制. 推送方式基础知识 要获取服务器上不定时更新的信息,一般来说有两种方法:第一种是客户端使用Pull(拉)的方式,就是隔一段时间就去服务器上获取一下信息,看是否有更新的信息出现.第二种就是 服务器使用Pu

Python写的CSDN信息推送小助手

转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thinkgamer 前言 这几天突然萌生了一个想法:自己写个python程序,定时查询一下自己的CSDN博客的一些信息,并以邮件的形式推送给自己,那么废话不多说,现在已经把基本功能给实现了,每天可以定时发送访问量,积分,排名,同时会比较前一天的数据,形成对比,呈现给自己,这样就能一目了然的看到自己每天博

Android Push Notification实现信息推送使用

本贴在http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html下略为改动. Apndroid Push Notification的特点:  快速集成:提供一种比C2DM更加快捷的使用方式,避免各种限制. 无需架设服务器:通过使用"云服务",减少额外服务器负担. 可以同时推送消息到网站页面,android 手机 耗电少,占用流量少. 具体配置过程:  首先, 我们需要下载androidpn-client-0.5.0.

HDU 1754 I Hate It 线段树单点更新求最大值

题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define N 200005 using namespace std; int data[N]; struct Tree { int l,r,ans; }tree[N*4]; void build(in

hdu 1754 I Hate It(线段树 之 单点更新 求最值)

I Hate It                                                                             Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢

PhoneGap实现信息推送-基于极光推送(Android版)

极光推送插件安装地址: https://github.com/jpush/jpush-phonegap-plugin 安装插件后,需要在AndroidManifest.xml中配置极光平台申请的App Key: <meta-data android:name="JPUSH_APPKEY" android:value="aca4b37e5c00d477b*****" /> 在JPushPlugin.java文件的22行处有报错,需要把这里修改为你自己的主包

友盟消息推送和更新XML配置

1 <receiver 2 android:name="com.umeng.message.NotificationProxyBroadcastReceiver" 3 android:exported="false" > 4 </receiver> 5 6 <receiver 7 android:name="com.umeng.message.RegistrationReceiver" > 8 <inte

sql server主动推送客户端更新数据

小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮询了.因为我们的数据更新频率并不快. 后来觉得这种办法有点太土了. 或许长轮询更有效.  当然长轮询的技术很多了. java 的dwr,c#的 signalr.c#还可以同过异步请求来自己写长轮询. 遇到的第二个问题,就是数据库如何通知web服务器更新数据,下面便是sql server2008的推送

利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送

需求: 每当数据库有数据更新时,推送到客户端 软需求: 1.服务器资源有限,要求资源占用尽可能小: 2.项目可控,不许调用第三方不可信不稳定的方法. 已有事例: 1.58到家采用的方法是TCP的长连接,对服务器压力较大: 2.redis等提供了订阅推送服务,开源,但是定制化对开发者其开发语言水平要求较高,笔者水平达不到 最终方案: 解释: ①②页面加载时第一次请求数据,返回数据,加载,调用ajax2 ③页面加载即发出请求,但是此时没有数据,于是就block,等待其他组件insert msg ④收