-
个人简介
线段树
void build(int s, int t, int p) { if (s == t) { d[p] = a[s]; return; } int m = s + ((t - s) >> 1); build(s, m, p * 2), build(m + 1, t, p * 2 + 1); d[p] = d[p * 2] + d[(p * 2) + 1]; } void update(int l, int r, int c, int s, int t, int p) { if (l <= s && t <= r) { d[p] += (t - s + 1) * c, b[p] += c; return; } int m = s + ((t - s) >> 1); if (b[p] && s != t) { d[p * 2] += b[p] * (m - s + 1), d[p * 2 + 1] += b[p] * (t - m); b[p * 2] += b[p], b[p * 2 + 1] += b[p]; b[p] = 0; } if (l <= m) update(l, r, c, s, m, p * 2); if (r > m) update(l, r, c, m + 1, t, p * 2 + 1); d[p] = d[p * 2] + d[p * 2 + 1]; } int getsum(int l, int r, int s, int t, int p) { if (l <= s && t <= r) return d[p]; int m = s + ((t - s) >> 1); if (b[p]) { d[p * 2] += b[p] * (m - s + 1), d[p * 2 + 1] += b[p] * (t - m); b[p * 2] += b[p], b[p * 2 + 1] += b[p]; b[p] = 0; } int sum = 0; if (l <= m) sum = getsum(l, r, s, m, p * 2); if (r > m) sum += getsum(l, r, m + 1, t, p * 2 + 1); return sum; }kmp
int kmp(string a , string b){ int n = a.size(); int m = b.size(); a = '$' + a; b = '$' + b; for(int k = 2 , j = 0 ; k <= m ; k++){ while(j > 0 && b[k] != b[j + 1]){ j = f[j]; } if(b[k] == b[j + 1]){ j++; } f[k] = j; } int ans = 0; for(int k = 1 , j = 0 ; k <= n ; k++){ while(j > 0 && a[k] != b[j + 1]){ j = f[j]; } if(a[k] == b[j + 1]){ j++; if(j == m){ ans++; j = f[j]; } } } return ans; }莫队
#include <bits/stdc++.h> using namespace std; const int maxn = 5e4 + 5; int n , m , k , B , a[maxn]; long long cnt[maxn] , ans , op[maxn]; struct query{ int l , r , id; }q[maxn]; void add(int x , int d){ ans -= cnt[x] * cnt[x]; cnt[x] += d; ans += cnt[x] * cnt[x]; } bool cmp(const query &a , const query &b){ if(a.l / B != b.l / B){ return a.l / B < b.l / B; } return a.r < b.r; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m >> k; B = sqrt(n); for(int i = 1 ; i <= n ; i++){ cin >> a[i]; } for(int i = 1 ; i <= m ; i++){ cin >> q[i].l >> q[i].r; q[i].id = i; } sort(q + 1 , q + 1 + m , cmp); ans = 0; int l = 1 , r = 0; for(int i = 1 ; i <= m ; i++){ while(l > q[i].l) add(a[--l] , 1); while(l < q[i].l) add(a[l++] , -1); while(r > q[i].r) add(a[r--] , -1); while(r < q[i].r) add(a[++r] , 1); op[q[i].id] = ans; } for(int i = 1 ; i <= m ; i++){ cout << op[i] << endl; } } -
最近活动
- 2025铁一集团新苗秋季班作业8----《栈结构》 作业
- 2025铁一集团新苗秋季班作业7----《前缀和&差分前缀和》 作业
- 2025铁一集团新苗秋季班作业7----贪心+递推 作业
- 2025铁一集团新苗秋季班作业5----《枚举算法》 作业
- 2025铁一集团新苗秋季班作业4----《模拟算法》 作业
- 2025铁一集团新苗秋季班作业6----《排序和结构体排序》 作业
- 2025铁一集团新苗周赛计划#02 IOI
- 2025铁一集团新苗秋季班作业3------《位运算》 作业
- 2025铁一集团新苗秋季班作业2----《进制转换》 作业
- 铁外信息学C班训练集20250910 作业
- 2025 CSP-J1初赛模拟测试10 OI
- 2025 CSP-J1初赛模拟测试8 OI
- 2025 CSP-J1初赛模拟测试4 OI
- 2025 CSP-J1初赛模拟测试1 OI
- 第六届oiclass信息学夏令营-模拟测试1(订题) 作业
- 第六届oiclass信息学夏令营Class10-一维数组进阶 作业
- 第六届oiclass信息学夏令营Class9-一维数组的定义和基础应用 作业
- 第六届oiclass信息学夏令营Class8-循环嵌套 作业
- 第六届oiclass信息学夏令营Class7-循环结构-while语句 作业
- 2025铁一集团新苗for循环专题练习赛 IOI
- 2025铁一集团新苗线下测试2 IOI
- 2025铁一集团新苗线上模拟测试5 OI
- 2025铁一集团新苗线上模拟测试4 OI
- 2025铁一集团新苗线上模拟赛3 OI
- 2025铁一集团新苗线下测试1 IOI
- 2025铁一集团新苗day8作业-while2 作业
- 2025铁一集团新苗线上(8月4日)-循环专题练习 作业
- 2025铁一集团新苗复习-for循环专题练习1 作业
- 2025铁一集团新苗day15作业-结构体和函数 作业
- 2025铁一集团新苗day14作业-二维数组基础 作业
- 2025铁一集团新苗秋季班作业1-二维数组和二维字符数组 作业
- 2025铁一集团新苗day13作业-普通排序和桶排序 作业
- 2025铁一集团新苗线上模拟赛2 OI
- 2025铁一集团新苗day12作业-数组标记的应用 作业
- 2025铁一集团新苗day11作业-字符、字符数组和字符串 作业
- 2025铁一集团新苗day10作业-一维数组基础 作业
- 2025铁一集团新苗day9作业-多重循环 作业
- 2025铁一集团新苗day7作业-循环语句while1 作业
- 2025铁一集团新苗线上模拟赛1 OI
- 2025铁一集团新苗day6作业-for语句3(数据的在线处理) 作业
- 2025铁一集团新苗day5作业-for语句2(枚举和筛选) 作业
- 2025铁一集团新苗day4作业-循环for语句 作业
- 2025铁一集团新苗day3作业-if条件语句 作业
- 2025铁一集团新苗day2作业-表达式 作业
- 2025铁一集团新苗day1作业-C++程序结构 作业
- 2024小六秋季班第七课《前缀和&差分前缀和》 作业
- 第五届oiClass信息学夏令营day11作业-while2 作业
-
Stat
-
Rating