线段树4e7直接MLE
开小一点直接RE
#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
bool l_;
struct node{
int val, tag;
node(){
val = 0;
tag = 0;
}
};
node tree[10000010];
void pushup(int u){
tree[u].val = tree[2 * u].val + tree[2 * u + 1].val;
}
void pushdown(int l, int r, int u){
if (tree[u].tag){
tree[u * 2].tag += tree[u].tag;
tree[u * 2 + 1].tag += tree[u].tag;
int mid = (l + r) / 2;
tree[u * 2].val += (mid - l + 1) * tree[u].tag;
tree[u * 2 + 1].val += (r - mid) * tree[u].tag;
tree[u].tag = 0;
}
}
void update(int l, int r, int L, int R, int c, int u){
if (l >= L && r <= R){
tree[u].tag += c;
tree[u].val += c * (r - l + 1);
return ;
}
pushdown(l, r, u);
int mid = (l + r) / 2;
if (mid >= L) update(l, mid, L, R, c, u * 2);
if (mid < R) update(mid + 1, r, L, R, c, u * 2 + 1);
pushup(u);
}
int query(int l, int r, int L, int R, int u){
if (l >= L && r <= R) return tree[u].val;
pushdown(l, r, u);
int ret = 0;
int mid = (l + r) / 2;
if (mid >= L) ret += query(l, mid, L, R, u * 2);
if (mid < R) ret += query(mid + 1, r, L, R, u * 2 + 1);
return ret;
}
bool r_;
int main(){
//cout << ((&r_) - (&l_)) / 1024.0 / 1024.0 << endl;
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++){
int op;
scanf("%d", &op);
if (op == 0){
int l, r;
scanf("%d%d", &l, &r);
update(1, n, l, r, 1, 1);
}else{
int a;
scanf("%d", &a);
printf("%d\n", query(1, n, a, a, 1));
}
}
return 0;
}
线段树RE70分直接白调一小时