#include #include #include using namespace std; const int N = 1000010; int n, q, idx; map cf; // 存非零 map mm; string ToStr() { string ret = ""; for (auto [pos, cnt] : cf) { if (cnt == 0) continue; ret += (pos + '0'); ret += ','; if (cnt < 0) ret += '-'; ret += (abs(cnt) + '0'); ret += ';'; } return ret; } int main() { // freopen("seq.in", "r", stdin); // freopen("seq.out", "w", stdout); scanf("%d%d", &n, &q); string ss = ToStr(); if (!mm.count(ss)) mm[ss] = 0; for (int i = 1; i <= q; ++i) { char op; scanf(" %c", &op); if (op == '!') { int l, r, k; scanf("%d%d%d", &l, &r, &k); cf[l] += k, cf[r] -= k; while (cf.find(0) != cf.end()) cf.erase(cf.find(0)); string s = ToStr(); if (!mm.count(s)) mm[s] = i; } else { string s = ToStr(); printf("%d\n", mm[s]); } } return 0; }