F - Second Largest Query

 F - Second Largest Query (atcoder.jp)

#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <numeric>
#include <functional>
#include <climits>
//#include <windows.h>
using namespace std;
#define ll long long  
#define db double
#define PII pair<int, int>
#define TUP tuple<int, int, int>
const int inf = 0x3f3f3f3f;
ll mod = 1e15 + 17;
ll q_pow(ll a, ll b) { ll ret = 1; while (b) { if (b & 1)ret = ret * a % mod; b >>= 1; a = a * a % mod; }return ret; }
ll gcd(ll a, ll b) { if (!b)return a; return gcd(b, a % b); }

const int N = 1e6;

struct Node {
    int max0, cnt0, max1, cnt1;
}tree[N];
Node add(Node p, Node q) {
    if (p.max0 == q.max0) {
        if (p.max1 == q.max1) return (Node){p.max0, p.cnt0 + q.cnt0, p.max1, p.cnt1 + q.cnt1};
        return (Node){p.max0, p.cnt0 + q.cnt0, max(p.max1, q.max1), p.max1 > q.max1 ? p.cnt1 : q.cnt1};
    }
    if (p.max0 < q.max0) swap(p, q);
    if (p.max1 == q.max0) return (Node){p.max0, p.cnt0, p.max1, p.cnt1 + q.cnt0};
    return (Node){p.max0, p.cnt0, max(p.max1, q.max0), p.max1 > q.max0 ? p.cnt1 : q.cnt0};
}
void update(int l, int r, int node, int ind, int num) {
    if (l == r) {
        tree[node].max0 = num;
        return;
    }
    int mid = (l + r) >> 1;
    if (ind <= mid) update(l, mid, node * 2 + 1, ind, num);
    else update(mid + 1, r, node * 2 + 2, ind, num);
    tree[node] = add(tree[node * 2 + 1], tree[node * 2 + 2]);
    return;
}
Node query(int l, int r, int node, int L, int R) {
    if (L <= l and r <= R) return tree[node];
    int mid = (l + r) >> 1;
    if (mid >= R) return query(l, mid, node * 2 + 1, L, R);
    if (mid < L)  return query(mid + 1, r, node * 2 + 2, L, R);
    return add(query(l, mid, node * 2 + 1, L, R), query(mid + 1, r, node * 2 + 2, L, R));
}
void build_tree(int l, int r, int node) {
    if (l == r) {
        cin >> tree[node].max0;
        tree[node].cnt0 = 1;
        return;
    }
    int mid = (l + r) >> 1;
    build_tree(l, mid, node * 2 + 1);
    build_tree(mid + 1, r, node * 2 + 2);
    tree[node] = add(tree[node * 2 + 1], tree[node * 2 + 2]);
    return;
}
void yelp_solve() {
    int n, q, op, x, y;
    cin >> n >> q;
    build_tree(0, n - 1, 0);
    while (q--) {
        cin >> op >> x >> y;
        if (op == 1) update(0, n - 1, 0, --x, y);
        else cout << query(0, n - 1, 0, --x, --y).cnt1 << endl;
    }
    return;
}
int main() {
    int r = 1;
    //cin >> r;
    while (r--) yelp_solve();
    return 0;
}

Nano-ESG数据资源库的构建基于2023年初至2024年秋季期间采集的逾84万条新闻文本,从中系统提炼出企业环境、社会及治理维度的信息。其构建流程首先依据特定术语在德语与英语新闻平台上检索,初步锁定与德国DAX 40成分股企业相关联的报道。随后借助嵌入技术对文本段落执行去重操作,以降低内容冗余。继而采用GLiNER这一跨语言零样本实体识别系统,排除与目标企业无关的文档。在此基础上,通过GPT-3.5与GPT-4o等大规模语言模型对文本进行双重筛选:一方面判定其与ESG议题的相关性,另一方面生成简明的内容概要。最终环节由GPT-4o模型完成,它对每篇文献进行ESG情感倾向(正面、中性或负面)的判定,并标注所涉及的ESG具体维度,从而形成具备时序特征的ESG情感与维度标注数据集。 该数据集适用于多类企业可持续性研究,例如ESG情感趋势分析、ESG维度细分类别研究,以及企业可持续性事件的时序演变追踪。研究者可利用数据集内提供的新闻摘要、情感标签与维度分类,深入考察企业在不同时期的环境、社会及治理表现。此外,借助Bertopic等主题建模方法,能够从数据中识别出与企业相关的核心ESG议题,并观察这些议题随时间的演进轨迹。该资源以其开放获取特性与连续的时间覆盖,为探究企业可持续性表现的动态变化提供了系统化的数据基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云儿乱飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值