• hdu 3333 Turing Tree


    题目链接

    给n个数, m个询问, 每次询问输出区间内的数的和, 相同的数只计算一次。

    数组里的数是>-1e9 <1e9, 可以把它离散以后用莫队搞...

      1 #include <iostream>
      2 #include <vector>
      3 #include <cstdio>
      4 #include <cstring>
      5 #include <algorithm>
      6 #include <cmath>
      7 #include <map>
      8 #include <set>
      9 #include <string>
     10 #include <queue>
     11 #include <stack>
     12 #include <bitset>
     13 using namespace std;
     14 #define pb(x) push_back(x)
     15 #define ll long long
     16 #define mk(x, y) make_pair(x, y)
     17 #define lson l, m, rt<<1
     18 #define mem(a) memset(a, 0, sizeof(a))
     19 #define rson m+1, r, rt<<1|1
     20 #define mem1(a) memset(a, -1, sizeof(a))
     21 #define mem2(a) memset(a, 0x3f, sizeof(a))
     22 #define rep(i, n, a) for(int i = a; i<n; i++)
     23 #define fi first
     24 #define se second
     25 typedef pair<int, int> pll;
     26 const double PI = acos(-1.0);
     27 const double eps = 1e-8;
     28 const int mod = 1e9+7;
     29 const int inf = 1061109567;
     30 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
     31 const int maxn = 3e5+5;
     32 int a[maxn], b[maxn], c[maxn];
     33 ll ans[100005];
     34 struct node
     35 {
     36     int l, r, id, block;
     37     bool operator < (node a)const
     38     {
     39         if(block == a.block)
     40             return r<a.r;
     41         return block<a.block;
     42     }
     43 }q[100005];
     44 int main()
     45 {
     46     int t, n, m;
     47     cin>>t;
     48     while(t--) {
     49         scanf("%d", &n);
     50         mem(c);
     51         for(int i = 1; i<=n; i++) {
     52             scanf("%d", &a[i]);
     53             b[i-1] = a[i];
     54         }
     55         sort(b, b+n);
     56         int cnt = unique(b, b+n)-b;
     57         for(int i = 1; i<=n; i++) {
     58             a[i] = lower_bound(b, b+cnt, a[i])-b+1;
     59         }
     60         int BLOCK = max(1.0, sqrt(cnt*1.0));
     61         cin>>m;
     62         for(int i = 0; i<m; i++) {
     63             scanf("%d%d", &q[i].l, &q[i].r);
     64             q[i].block = q[i].l/BLOCK;
     65             q[i].id = i;
     66         }
     67         sort(q, q+m);
     68         ll sum = 0;
     69         for(int i = q[0].l; i<=q[0].r; i++) {
     70             if(!c[a[i]]) {
     71                 sum += b[a[i]-1];
     72             }
     73             c[a[i]]++;
     74         }
     75         ans[q[0].id] = sum;
     76         for(int i = 1; i<m; i++) {
     77             if(q[i].l<q[i-1].l) {
     78                 for(int j = q[i-1].l-1; j>=q[i].l; j--) {
     79                     if(!c[a[j]]) {
     80                         sum += b[a[j]-1];
     81                     }
     82                     c[a[j]]++;
     83                 }
     84             } else {
     85                 for(int j = q[i-1].l; j<q[i].l; j++) {
     86                     if(c[a[j]]==1) {
     87                         sum -= b[a[j]-1];
     88                     }
     89                     c[a[j]]--;
     90                 }
     91             }
     92             if(q[i].r>q[i-1].r) {
     93                 for(int j = q[i-1].r+1; j<=q[i].r; j++) {
     94                     if(!c[a[j]]) {
     95                         sum += b[a[j]-1];
     96                     }
     97                     c[a[j]]++;
     98                 }
     99             } else {
    100                 for(int j = q[i-1].r; j>q[i].r; j--) {
    101                     if(c[a[j]] == 1) {
    102                         sum -= b[a[j]-1];
    103                     }
    104                     c[a[j]]--;
    105                 }
    106             }
    107             ans[q[i].id] = sum;
    108         }
    109         for(int i = 0; i<m; i++)
    110             printf("%I64d
    ", ans[i]);
    111     }
    112     return 0;
    113 }
  • 相关阅读:
    网络基础 03 交换机基本原理与配置
    网络基础 02 网络布线与数制转换
    C#操作excel(读取excel里的图片并show在页面上)
    让IIS支持中文文件名和目录
    Asp.net中防止用户多次登录的方法
    【转摘】一道关于实例化顺序的C#面试题
    选项卡调其他窗体方法
    同一个工作组的计算机能ping通不能访问对方共享资源
    Combobox出现System.Data.DataRowView的原因,以及指定ValueMember的时机问题
    无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。
  • 原文地址:https://www.cnblogs.com/yohaha/p/5081313.html
Copyright © 2020-2023  润新知