亿些代码

· · 个人记录

合并果子(AC)

//合并果子 
//数组优化 
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, l, x, y, a[100005], b[100005], p, q, ans;
int main(){
    scanf("%d", &n);
    memset(a, 127, sizeof(a));
    memset(b, 127, sizeof(b));
    for(i=1; i<=n; i++){
        scanf("%d", &a[i]);
    }
    sort(a+1, a+1+n);
    x=1,y=n,p=q=1;
    for(i=1; i<n; i++){
        if(a[x+1] < b[p]){
            b[q++]=a[x+1] + a[x];
            x += 2;
        }
        else if(b[p+1] < a[x]){
            b[q++]=b[p] + b[p+1];
            p += 2;
        }
        else{
            b[q++]=a[x] + b[p]; 
            x++, p++;
        }
        ans += b[q-1];
    }
    printf("%d", ans);
    return 0;
}
//队列 
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, l,x,y,ans;
priority_queue <int> q;
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        int k;
        scanf("%d", &k);
        q.push(-k);
    }
    for(i=1; i<n; i++){
        int o=q.top();
        q.pop();
        int p=q.top();
        q.pop();
        ans += o + p;
        q.push(o+p);
    }
    printf("%d",-ans);
    return 0;
}
//普通找最大最小 
#include <stdio.h>
int n, m, i, j, k, l,x,y,ans, a[100005];
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        scanf("%d", &a[i]);
    }
    a[0]=2e9;
    for(i=1; i<n; i++){
        x=y=0;
        for(j=1; j<=n; j++){
            if(a[j] <= a[x]){
                y=x, x=j;
            }
            else if(a[j] < a[y]){
                y=j;
            }
        }
        ans = ans + a[x] + a[y];
        a[x]=a[y]+a[x];
        a[y]=a[0];
    }
    printf("%d",ans);
    return 0;
}

棋盘

//  深 
//  搜 

//#include <bits/stdc++.h>
//using namespace std;
//int n, m, i, j, k, xx, yy, ans, s;
//int f[1005][1005][2], mp[1005][1005];
//const int dx[]={0, 1, 0, -1}, dy[]={1, 0, -1, 0};
//void dfs(int x, int y, int z, int s){
//    int xx, yy, zz;
//    if(x<1 || x>n || y<1 || y>n) return ;
//    if(s >= f[x][y][z]) return;//最优性剪枝。 
//    if(s >= f[n][n][0]||s >= f[n][n][1]) return;
//    f[x][y][z] = s;
//    for(int i=0; i<4; ++i){
//      xx = x+dx[i], yy = y+dy[i], zz=mp[xx][yy];
//      if(zz == -1){
//          if(z == mp[x][y]) dfs(xx, yy, z, s+2);
//          else continue;
//      }
//      else dfs(xx, yy, zz, s+(zz!=z));
//  }
//}
//int main(){
//    scanf("%d%d", &n, &m);
//    memset(mp, -1, sizeof(mp));//赋初值。 
//    memset(f, 9, sizeof(f));
//    for(i=1; i<=m; i++){
//      int a, b, c;
//        scanf("%d%d%d", &a, &b, &c);
//        mp[a][b] = c;
//    }
//    dfs(1, 1, mp[1][1], 0);
//  ans = f[n][n][0] < f[n][n][1] ? f[n][n][0] : f[n][n][1];
//  printf("%d", ans!=f[0][0][0] ? ans : -1);
//    return 0;
//}

//  广 
//  搜 

//#include <bits/stdc++.h>
//#define N 11
//#define Nm 127
//#define M 4
//#define Mm 15
//using namespace std;
//int n, m, i, j, k, x, y, z, v, xx, yy, zz, ans, s;
//int mp[1005][1005], f[1005][1005][2], q[20000005];
//const int dx[4]={0, 0, 1, -1}, dy[4]={1, -1, 0, 0};
//int main(){
//    scanf("%d%d", &n, &m);
//    memset(mp, -1, sizeof(mp));
//    memset(f, 9, sizeof(f)); 
//    for(i=1; i<=m; ++i){
//      int x, y, z;
//        scanf("%d%d%d", &x, &y, &z);
//        mp[x][y]=z;
//    }
//    f[1][1][mp[1][1]]=0, q[1]=1<<N|1<<M|mp[1][1];
//    for(i=j=1; i<=j; ++i){
//      x = q[i]>>N, y = q[i]>> M & Nm, z = q[i] & Mm, v = f[x][y][z];
////        printf("Q=%d xyz=%d %d %d  v=%d\n", q[i], x, y, z, v);
//      for(k=0; k<4; ++k){
//          xx = x+dx[k], yy = y+dy[k], zz=mp[xx][yy];
//          if(xx<1 || xx>n || yy<1 || yy>n) continue;
//          if(zz == -1){ 
//              if(z == mp[x][y]) v = f[x][y][zz=z] + 2;
//              else v = f[0][0][0];
//          }
//          else v = f[x][y][z] + (zz != z);
//          if(v < f[xx][yy][zz]){
//              f[xx][yy][zz] = v, q[++j] = xx<<N | yy<<M | zz;
//          }
//      }
//  }
//  ans = f[n][n][0] < f[n][n][1] ? f[n][n][0] : f[n][n][1];
//    printf("%d", ans!=f[0][0][0] ? ans : -1);
//    return 0;
//}

//  迪 
//  杰
//  斯
//  特
//  拉

#include <bits/stdc++.h>
#define N 11
#define Nm 127
#define M 4
#define Mm 15
using namespace std;
int n, m, i, j, k, x, y, z, v, xx, yy, zz, ans, s;
int mp[1005][1005], f[1005][1005][2], q[20000005];
const int dx[4]={0, 0, 1, -1}, dy[4]={1, -1, 0, 0};
void zhaozihao(int &x, int &y, int &z){
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            if(!u[x][y][1] && ) 
            if(!u[x][y][0] && ) 
        }
    }
    u[x][y][z] = 1;
}
int main(){
    scanf("%d%d", &n, &m);
    memset(mp, -1, sizeof(mp));
    memset(f, 9, sizeof(f)); 
    for(i=1; i<=m; ++i){
        int x, y, z;
        scanf("%d%d%d", &x, &y, &z);
        mp[x][y]=z;
    }
    for(i=1; i<=n; i++){
        zhaozihao(x=0, y=0, z=0);

        for(xx=1; k<=n; k++){
            for(yy){

            }
        }
    }
    ans = f[n][n][0] < f[n][n][1] ? f[n][n][0] : f[n][n][1];
    printf("%d", ans!=f[0][0][0] ? ans : -1);
    return 0;
}
/*
5 7
1 1 0
1 2 0
2 2 1
3 3 1
3 4 0
4 4 1
5 5 0
*/

万年历

#include <bits/stdc++.h>
using namespace std;
#define qiqian 114514
#define qi 1919
#define qian 810
#define ll long long
int n, m, i, j, k, h, p, q, l, t;
int offset = 6, yuey[15], ok[100005];
int ji[15] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int dayNum[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
    scanf("%d", &m);
    if(m%4==0 && m%100!=0 || m%400==0) dayNum[2]++;
    if(m < 2000){
        for(i=1999; i>=m; i--){
            if(i%4==0 && i%100!=0 || i%400==0) offset = (offset + 371 - 366)%7;
            else offset = (offset + 371 - 365)%7;
        }
    }
    else if(m > 2000){
        for(i=2000; i<m; i++){
            if(i%4==0 && i%100!=0 || i%400==0) offset = (offset + 366)%7;
            else offset = (offset + 365)%7;
        }
    }
    printf("                              %d                              \n\n", m);
    for(i=1; i<=12; i++){
        offset = (offset + dayNum[i-1])%7;
        yuey[i] = offset;
    }
    for(j=1; j<=4; j++){
        l = (j-1)*3;
        if(j == 1) printf("      January               February               March        \n");
        else if(j == 2) printf("       April                  May                   June        \n");
        else if(j == 3) printf("        July                 August              September      \n");
        else if(j == 4) printf("      October               November              December      \n");
        printf("Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa\n");
        for(q=1; q<=6; q++){
            for(h=l+1; h<=l+3; h++){
                if(ji[h] > dayNum[h]){
                    printf("                      ");
                    continue;
                }
                if(q == 1){
                    for(i=1; i<=yuey[h]; i++){
                        printf("   ");
                    }
                }
                for(i=ji[h]; i<ji[h]+7, i<=dayNum[h]; i++){
                    if(i<10) printf(" %d ", i);
                    else printf("%d ", i);
                    if(i == dayNum[h]){
                        for(t=ji[h]+6; t>i; t--){
                            printf("   ");
                        }
                        break;
                    }
                    if((yuey[h] + i) % 7 == 0) break;
                }
                ji[h] = i+1;
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}
//1900.1.1是周一
//(x+365)是7的倍数+今年第一天是周几 、 
// x = offset+7a-365

大整数(WA)

#include <bits/stdc++.h>
#define N 99
using namespace std;
int i, j, k, x[N], y[N], z[N];
int n[N], m[N], l[N], r[N], t[N], s[N], san[N]={1, 3};
char o[N];

void chu2(int *a){
    for(i=a[0]; i>1; i--){
        if(a[i]&1) a[i-1] += 10;
        a[i] >>= 1;
    }
    a[i] /= 2;
    while(a[0] > 1 && !a[a[0]]) a[0]--;
}

void jia(int *a, int *b){
    memset(t, 0, sizeof(t));
    t[0] = max(a[0], b[0]);
    for(i=1; i<=t[0]; i++){
        t[i] += a[i] + b[i];
        if(t[i] > 9) t[i] -= 10, t[i+1] = 1;
    }
    if(t[i]) t[0]++;
    memcpy(a, t, sizeof(t));
}

void cheng(int *s, int *a, int *b){
    memset(s, 0, sizeof(t));
    for(i=1; i<=a[0]; i++){
        for(j=1; j<=b[0]; j++){
            s[i] += a[i] * b[j];
        }
    }
    s[0] = a[0] + b[0] - 1;
    for(i=1; i<=s[0]||s[i]; i++){
        s[i+1] += s[i] / 10;
        s[i] %= 10;
    }
    s[0] = i - 1;
}

void jian(int *a){
    a[i=1]--;
    while(a[i] < 0) a[i++] += 10, a[i]--;
    if(i == a[0]){
        while(a[0]>1 && !a[a[0]]) a[0]--;
    }
}

int sda(){
    if(s[0] != n[0]) return s[0] > n[0];
    for(i=s[0]; i>=1; i--){
        if(s[i] != n[i]) return s[i] > n[i];
    }
    return 0;
}

void out(int *a){
    for(i=a[0]; i>=1; i--) printf("%d", a[i]);
    printf("\n");
}

int main(){
//  int x[N]={1, 3, 3}, y[N]={2, 0, 1};
    scanf("%s", o+1);
    n[0] = strlen(o+1);
    for(i=1; i<=n[0]; i++) n[i] = o[n[0]+1-i] - 48;
    l[0] = r[30] = 1, r[0] = 30;
//  for(i=1; i<=30; i++) r[i] = 1;
    while(memcmp(l, r, r[0]*4+4) != 0){
        memset(m, 0, sizeof(m));
        m[0] = m[1] = 1;
        jia(m, l);
        jia(m, r);
        chu2(m);
//      out(m);
        cheng(x, m, san);
        cheng(y, m, m);
        cheng(z, y, m);
//      out(m)
        memset(s, 0, sizeof(s));
        jia(s, x);
        jia(s, y);
        jia(s, z);
//      k = m*m*m + m*m + 3*m;
        if(sda()){
            jian(m);
            memcpy(r, m, sizeof(m));
        }
        else memcpy(l, m, sizeof(m));
    }
//  return memcmp(l, r, r[0]*4) == 0;
    out(r);
    return 0;
}
//1000000000000001000000000000003000000000000001
}

幻灯片(AC)

//广搜
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, kk, a[105], b[105];
int r[105], q[105], h[105], f[105], mp[105][105], ans[105];
struct JB{
    int x1, x3, y1, y3;
} d[105];
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        scanf("%d%d%d%d", &d[i].x1, &d[i].x3, &d[i].y1, &d[i].y3);
    }
    for(i=1; i<=n; i++){
        scanf("%d%d", &a[i], &b[i]);
    }
    for(i=1; i<=n; i++){
        for(j=1; j<=n; j++){
            mp[i][j] = (a[i] <= d[j].x3 && a[i] >= d[j].x1 && b[i] <= d[j].y3 && b[i] >= d[j].y1);
            r[i] += mp[i][j];
        }
    }
    q[1] = m = 1;
    for(i=1; i<=m; i++){
        int a = q[i];//点
//      if(r[a] != 1) continue;
        r[a]--;
        for(j=1; j<=n; j++){//幻灯片 
            if(mp[a][j]){
                ans[j] = a, mp[a][j] = 0;
                for(k=1; k<=n; k++){
                    if(mp[k][j]){
                        mp[k][j] = 0;
                        r[k]--;
                        if(r[k] == 1) q[++m] = k;
                    }
                }
            }
        }
    }
//  if(m < n){
//      printf("None\n");
//      return 0;
//  }
    for(i=1; i<=n; i++) printf("%c %d\n", char('A'+i-1), ans[i]);
    return 0;
}

//深搜
#include<bits/stdc++.h>
using namespace std;
struct JB{
    int x1, x3, y1, y3;
} d[30];
struct dick{
    int x, y;
} p[30];
int n, m, i, j, k, pd;
int mp[30][30], u[30], ans[30];//mp记录点与幻灯片的关系,u记录点的边数,ans记录答案 
void find(int k){
    int i, j;
    pd++, u[k]--;
    for(i=1; i<=n; i++){//找相对应的点与幻灯片 
        if(!mp[k][i]) continue;
        ans[i] = k, mp[k][i] = 0;//ans记录答案,清边 
        for(j=1; j<=n; j++){//清除幻灯片与其它点的边 
            if(mp[j][i]){
                u[j]--;
                mp[j][i] = 0;
                if(u[j] == 1) find(j);//如果清边后有且只有一条边,查找它 
            }
        }
        break;
    }
}
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){//读入幻灯片坐标 
        scanf("%d%d%d%d", &d[i].x1, &d[i].x3, &d[i].y1, &d[i].y3);
    }
    for(i=1; i<=n; i++){//点的坐标 
        scanf("%d%d", &p[i].x, &p[i].y);
        for(j=1; j<=n;j++){//判断点与幻灯片的关系 
            if(p[i].x <= d[j].x3 && p[i].x >= d[j].x1 && p[i].y <= d[j].y3 && p[i].y >= d[j].y1){
                mp[i][j] = 1, u[i]++;//建边 
            }
        }
    }
    for(i=1; i<=n; i++){
        if(u[i] == 1) find(i);//判断相连的点与幻灯片是否唯一 
    }
    if(pd < n){
        printf("None\n");
        return 0;
    }
    for(i=1; i<=n; i++){
        char shit = char('A'+i-1);
        printf("%c %d\n", shit, ans[i]);
    }
    return 0;
}

差分约束C题(未改好)

#include <bits/stdc++.h>
using namespace std;
int m, n, i, j=1, k, kk, a, b, c, l;
int f[30005], h[30005], u[30005], q[1000005];
struct JB{
    int a, b, c, n;
//  bool operator < (const JB &A) const {
//      return c < A.c;
//  }
} d[200005];
void cun(int a, int b, int c){
    d[++kk] = {a, b, c, h[a]}, h[a] = kk;
}
int main(){
    scanf("%d%d", &l, &n);
    for(i=1; i<=n; i++){
        int a, b, c;
        scanf("%d%d%d", &c, &a, &b);
        if(c == 1){ cun(a, b, 0); cun(b, a, 0);}//<=  >=
        if(c == 2){ cun(a, b, 1);}//<
        if(c == 3){ cun(b, a, 0);}//>=
        if(c == 4){ cun(b, a, 1);}//>
        if(c == 5){ cun(a, b, 0);}//<=
    }
//  memset(f, -1, sizeof(f));
//  for(j=1; j<=l; j++){
//      cun(j, j+1, 0);
//      cun(j, j-1, f[j]=-1);
//      q[j]=j, u[j]=1;
//  }
//for(i=1; i<=n; i++){
//  printf("%d ", h[i]);
//}
//cout << endl;
    memset(f, 9, sizeof(f));
    f[1] = 0, q[1] = u[1] = 1;
    for(i=j=1; i<=j; i++){
//      cout << 123;
        int a = q[i]; u[a] = 0;
//      cout << endl << h[a] << endl;
        for(int k=h[a]; k; k=d[k].n){
//          cout << 123;
            int b = d[k].b, c = d[k].c;
//          if(c == 1) f[b] = f[a];
//          if(c == 2) f[b] = f[a]+1;
//          if(c == 3) f[b] = f[a]-1;
//          if(c == 4) f[b] = f[a]-1;
//          if(c == 5) f[b] = f[a]+1;
//          cout << f[a] << endl;
            if(f[a]+c < f[b]){
//          cout << i << " " << k << " ";
                f[b] = f[a] + c;
                if(!u[b]){
                    u[b] = 1;
                    q[++j] = b;
                }
            }
        }
    }
    printf("%d\n", f[l]);
    return 0;
}

重力球(WA50)

#include <bits/stdc++.h>
using namespace std;
int n, m, ans, a, b, c, d, o, ji, p[33][33], f[33][33][33][33], q[810005];
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
void zhaozihao(int &x, int &y, int i){
    while(!p[x][y]){
        x += dx[i], y += dy[i];
    }
    x -= dx[i], y -= dy[i];
}
void bfs(int x, int y, int xx, int yy){
    q[1] = x<<15|y<<10|xx<<5|yy, f[x][y][xx][yy] = 0;
    int i, j, s, t, ss, tt;
    for(i=j=1; i<=j; i++){
        x = q[i]>>15, y = q[i]>>10&31, xx = q[i]>>5&31, yy = q[i]&31;
        for(int k=0; k<4; k++){
            zhaozihao(s=x, t=y, k);
            zhaozihao(ss=xx, tt=yy, k);
            if(s == ss && t == tt){
                ans = f[x][y][xx][yy] + 1;
                return;
            }
            if(f[x][y][xx][yy] + 1 < f[s][t][ss][tt]){
                f[s][t][ss][tt] = f[x][y][xx][yy] + 1;
                q[++j] =  s<<15|t<<10|ss<<5|tt;
            }
        }
    }
    ji = j;
}
void jb(){
    int dx, dy;
    for(long long j=1; j<=ji; j++){
        dx = (q[j]>>10), dy = (q[j]&1023);
        f[dx>>5][dx&31][dy>>5][dy&31] = f[0][0][0][0];
    }
    ji = 0;
}
int main() {
    scanf("%d%d%d", &n, &m, &o);
//  mem();
    memset(f, 9, sizeof(f));
    for(int i=1; i<=m; i++){
        int a, b;
        scanf("%d%d", &a, &b);
        p[a][b] = 1;
    }
    for(int i=1; i<=n; ++i) p[0][i] = p[n+1][i] = p[i][0] = p[i][n+1] = 1;
    for(int x, y, xx, yy, i=1; i<=o; ++i){
        scanf("%d%d%d%d", &x, &y, &xx, &yy);
        if(x==xx&&y==yy){
            printf("0\n");
            continue;
        }
        ans = 1e9;
        bfs(x, y, xx, yy);
        if(ans>=1e9-1) printf("-1\n");
        else printf("%d\n", ans);
//      mem();
        jb();
    }
    return 0;
}
/*
4 4 3
2 2
2 4
3 2
4 4
1 3 4 3
2 1 2 1
1 2 3 4
*/
/*
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, p, ans, q[255][255], f[11005][11005];
long long ji, jj[100005];
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};

int zhaozihao(int x, int y, int i){
    int xx = x, yy = y;
    while(!q[xx][yy]){
        xx += dx[i], yy += dy[i];
    }
    xx -= dx[i], yy -= dy[i];
    return xx<<5|yy;
}

void dfs(int x, int y, int xx, int yy, int bushu){
    int dx, dy, i;

    if(xx == x && yy == y){
        ans = min(ans, bushu);
        return ;
    }
    if(bushu >= ans) return ;
    if(bushu >= f[x<<5|y][xx<<5|yy]) return ;
    else f[x<<5|y][xx<<5|yy] = bushu;
//  printf("(%d %d)\n", x<<5|y, xx<<5|yy);
    jj[++ji] = x << 15 | y << 10 | xx << 5 | yy;

    for(i=0; i<4; i++){
        dx = zhaozihao(x, y, i);
        dy = zhaozihao(xx, yy, i);
        dfs(dx>>5, dx&31, dy>>5, dy&31, bushu+1);
    }

}

//void mem(){
//  int i, j;
//  for(i=1; i<=1005; ++i){
//      for(j=1; j<=1005; ++j){
//          f[i][j] = 1e9;
//      }
//  }
//}

int main() {
    scanf("%d%d%d", &n, &m, &p);
//  mem();
    memset(f, 9, sizeof(f));
    for(i=1; i<=n; i++) {
        int a, b;
        scanf("%d%d", &a, &b);
        q[a][b] = 1;
    }
    for(i=1; i<=n; ++i){
        q[0][i] = q[n+1][i] = q[i][0] = q[i][n+1] = 1;
    }
    for(i=1; i<=p; ++i){
        int x, y, xx, yy;
        scanf("%d%d%d%d", &x, &y, &xx, &yy);
        ans = 1e9;
        dfs(x, y, xx, yy, 0);
        if(ans == 1e9) printf("-1\n");
        else printf("%d\n", ans);
//      mem();
        for(long long j=1; j<=ji; j++){
            int dx = (jj[j]>>10);
            int dy = (jj[j]&1023);
            f[dx][dy] = f[0][0];
        }
        ji = 0;
    }
    return 0;
}
*/

无名代码unknown

#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k;
int w[100005], v[100005], f[1005][1005];
int dfs(int k, int s){
    int i, p, q=1e9;
    if(k > n) return 0;
    if(s > m) return 1e9;
    if(f[k][s] != f[0][0]) return f[k][s];
    for(i=0; i<=m/v[k]; i++){
//      printf("v = %d, %d\n", v[k], m/v[k]);
        p = dfs(k+1, s+v[k]*i) + w[k]*i;
        q = q>p ? p:q;
    }
    return f[k][s] = q;
}
int main(){//可以填物品编号 
    scanf("%d%d", &m, &n);
    for(i=1; i<=n; i++){
        scanf("%d%d", &w[i], &v[i]);
    }
    memset(f, -1, sizeof(f));
    printf("%d\n", dfs(1, 0));
    return 0;
}
/*

*/
#include <bits/stdc++.h>
#define max(a,b) a>b?a:b
#define lowbit(a) a&-a
using namespace std;
int n, m, i, j, k, ans1, ans2;
int cnt[200005], q[200005], f[200005], d[200005];
void xia(int lc, int rc, int p){//修正下放 
    if(d[lc] == d[rc]) cnt[p] = cnt[lc] + cnt[rc], d[p] = d[lc];
    else if(d[rc] > d[lc]) cnt[p] = cnt[rc], d[p] = d[rc];
    else cnt[p] = cnt[lc], d[p] = d[lc];
}
void jia(int p, int l, int r, int k, int z){//单点修改
    if(l == r) d[p] = z, cnt[p]=1;//找到坐标,单点修改,记录相同的最大值的树当期区间变为1 
    else{
        int m=l+r>>1, lc=p<<1, rc=p<<1|1;//找 
        if(k <= m) jia(lc, l, m, k, z);
        if(k > m) jia(rc, m+1, r, k, z);
        xia(lc, rc, p);

    }
}
void cha(int p, int l, int r, int x, int y){//区间查询最大值 
    if(x<=l && r<=y){//包括区间l r:记录答案 
        if(ans1 < d[p]) ans1 = d[p], ans2 = cnt[p];
//        if(ans1 == d[p]) ans2 += cnt[p];
    }
    else{
        int m=l+r>>1, lc=p<<1, rc=p<<1|1;//找 
        if(x <= m) cha(lc, l, m, x, y);
        if(y > m) cha(rc, m+1, r, x, y);
        xia(lc, rc, p);
   }
}
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        int b;
        scanf("%d", &b);
        cnt[i]=1;//赋初值
        jia(1, 1, n, i, b);
    }
    for(i=1; i<=m; i++){
        char s[15];
        int a, b;
        scanf("%s%d%d%*c", s+1, &a, &b);
        if(s[1] == 'C'){//更新 
            jia(1, 1, n, a, b);
            for(j=1; j<=n; j++) printf("(%d %d)  ", d[j], cnt[i]);
            printf("\n");
        }
        else{//查询 
            ans1=-1, ans2=-1;
            cha(1, 1, n, a, b);
            for(j=1; j<=n; j++) printf("(%d %d)  ", d[j], cnt[i]);
            printf("\n");
            printf("%d %d\n", ans1, ans2);
        }
    }
}
/*
5 3
2 4 3 6 8
Ask 1 5
Change 2 10
Ask 1 3
*/
#include <bits/stdc++.h>
#define max(a,b) a>b?a:b
#define lowbit(a) a&-a
using namespace std;
int n, m, i, j, k, ans=-1;
int cnt[200005], q[200005], f[200005], d[200005];
int pd(int k){
    for(int i=2; i*i<=n; i++) if(k%i==0) return 0;
    return 1;
}
int gcd(int a, int b){
    if(a%b==0) return b;
    return gcd(b, a%b);
}
int fk(int n){
    int i, j, k;
    for(i=3; i<=n; i++){
        if(pd(i)){
            for(j=i; j<=n; j+=i){
                f[j]++;
            }
        }
        if(sn) return i;
    }
    return -1;
}
int main(){
    scanf("%d", &n);
    printf("%d", fk(n));
}
#include <stdio.h>
#include <string.h>
#define N 1005
int n, m, i, j, k, a[N], f[N][N], ans;
int he(int x, int y){
    for(int i=x+1, s=a[x]; i<=y; i++){
        s=s*10+a[i];
    }
    return s;
}
int dfs(int k, int s){
    int i, p, q=0;
    if(k == n) return 0;
    if(s > m) return -1e9;
    if(f[k][s]!=f[0][0]) return f[k][s];
    for(i=1; i<=n; i++){

    }
    return 
}
int main(){
    scanf("%d%d", &n, &m);
    m = n-m;
    for(i=1; i<=n; i++){
        scanf("%1d", &a[i]);
    }
    memset(f, -1, sizeof(f));
    printf("%d\n", dfs(1,0));
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, ans=1e9;
int u[105][105], s[1005];
int dfs(int l, int r){
    int q=1e9, p;
    if(r-l<=2) return 0;
    if(u[l][r] != u[0][0]) return u[l][r];
    for(int i=l; i<r; i++){
        p = dfs(l, i)+dfs(i+1, r)+s[l]*s[r]*s[i];
        if(p < q) q = p;
    }
    return u[l][r] = q;
}
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        scanf("%d", &s[i]);
        s[i+n] = s[i];
    }
    for(i=1; i<=n; i++) ans = min(ans, dfs(i, i+n-1));
    printf("%d", ans);
    exit(0);
}
/*
5
121 122 123 245 231
12214884
*/
}
#include <bits/stdc++.h>
using namespace std;
#define N 1005
int n, m, i=1, c, j, k;
int a[N], f[N][N], ans;
char s[N];
int main(void){
    scanf("%s", s+1);
    n = strlen(s+1);
    for(i=1; i<=n; i=-~i)f[i][i] = 1;
    for(c=2; c<=n; c=-~c){
        for(i=1; i+c<=n; i++, j++){
            j = i+c;
            f[i][j] = 1e9;
            for(int k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
            if((s[i]=='('&&s[j]==')')||(s[i]=='['&&s[j]==']')) f[i][j]=min(f[i][j],f[i+1][j-1]);
        }
    }
    printf("%d", f[1][n]);
}
//#include <stdio.h>
//#include <string.h>
//#define N 1005
//int n, m, i=1, j, k;
//int a[N], s[5], u[N][N], ans;
//char c[N];
//int pei(int l, int r){
//  if(a[l] == 1&&a[r] == 2) return 1;
//  if(a[l] == 3&&a[r] == 4) return 1;
//  return 0;
//}
//int dfs(int l, int r){
//    int i, q=0, p;
//    if(l == r) return 0;
//    if(pei(l, r)) q = dfs(l+1, r-1) + 2;
////    if(u[l][r] != u[0][0]) return u[l][r];
//  for(i=l; i<r; i++){
//      p = dfs(l, i) + dfs(i+1, r);
//      if(p > q) q = p;
//  }
//    return u[l][r] = q;
//}
//int main(){
//  while(scanf("%c", &c[i]) == 1){
//      i=-~i;
//      a[i] = c[i]=='('? 1:a[i];
//      a[i] = c[i]==')'? 2:a[i];
//      a[i] = c[i]=='['? 3:a[i];
//      a[i] = c[i]==']'? 4:a[i];
//      s[a[i]]++;
//  }
//  i = i-dfs(1, i)*2;
//  memset(u, -1, sizeof(u));
//  printf("%d\n", i);
//  return 0;
//}
///*
//[])
//*/
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
char s[205], w[9][25], f[205][205];
int i, j, k, n, m, c;
int shu(int k, int i){

    return ;
}
int main(){
    scanf("%d %d", &c, &m);
    for(i=0; i<c; i++){
        scanf("%s", s+1+i*20);
    }
    n = strlen(s+1);
    scanf("%d", &c);
    for(i=1; i<=c; i++){
        scanf("%s", w[i]);
    }
    for(i=1; i<=n; i++){
        for(j=1; j<=min(i, m); j++){
            for(k=j; k<=i; k++){
                f[i][j]=max(f[i][j], f[k-1][j-1]+shu(k, i));
            }
        }
    }
    printf("%d", f[n][m]);
    return 0;
}
/*
1 3
thisisabookyouareaoh
4
is
a
ok
sab
*/

GDKOI

day1a

#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, jb[5], shit, ax, ay, ai, aj, a[2005][2005];
int main(){
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        for(j=1; j<=n; j++){
            scanf("%d", &a[i][j]);
        }
    }
    jb[1] = a[1][n], jb[2] = a[n][1];
    for(i=2; i<=n; i++){
        jb[1] ^= a[i][n];
        jb[2] ^= a[n][i];
    }
    for(i=2; i<n; i++){
        shit = a[i][2];
        for(j=3; j<=n; j++) shit ^= a[i][j];
        shit ^= jb[1];
        if(shit!= a[i][1]) ax = i, ai++;
    }
    for(i=2; i<n; i++){
        shit = a[2][i];
        for(j=3; j<=n; j++) shit ^= a[j][i];
        shit ^= jb[2];
        if(shit!= a[1][i]) ay = i, aj++;
    }
    if(ai == 1&&aj == 1) printf("%d %d", ax, ay);
    else if(ai == 1 && !aj) printf("%d %d", ax, 1);
    else if(ai == 1 && aj>1) printf("%d %d", ax, n);
    else if(!ai && aj == 1) printf("%d %d", 1, ay);
    else if(ai > 1 && aj == 1) printf("%d %d", n, ay);
    else if(!ai && !aj) printf("%d %d", 1, 1);
    else if(ai > 1 && aj > 1) printf("%d %d", n, n);
    else if(!ai && aj > 1) printf("%d %d", 1, n);
    else if(ai > 1 && !aj) printf("%d %d", n, 1);
    return 0;
}

day1b

#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k;
long long s[200005], d[200005], a[200005], p, l, r;
int main(){
    scanf("%d%d", &n, &m);
    a[0] = d[0] = a[n+1] = 1e9, p = sqrt(n), d[(n+1)/p] = 1e9;
    for(i=1; i<=n; i++){
        scanf("%lld", &a[i]);
        d[i/p] = max(d[i/p], a[i]);
        s[i] = s[i-1] + a[i];
    }
    while(m--){
        scanf("%d%d", &i, &k);
        for(l=i-1; a[l]<k; l--){
            if((l+1)%p==0 && d[l/p]<k) l -= p-1;
        }
        for(r=i+1; a[r]<k; r++){
            if(r%p==0 && d[r/p]<k) r += p-1;
        }
        printf("%lld\n", k*(r-1-l)-s[r-1]+s[l]);
    }
    return 0;
}

day1c

#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, l, r, ans, a[1000005];
int main(){
    scanf("%d%d%d", &n, &l, &r);
    for(i=1; i<=n; i++)scanf ("%d", &a[i]);
    sort(a+1, a+n+1);
    for(i=1, j=n; i<=j; ){
        if(i == j) ans++, i++;
        else{
            if(a[i]+a[j] > r) j--, ans++;
            else if(a[i]+a[j] < l) i++, ans++;
            else i++, j--;
        }
    }
    printf("%d", ans);
    return 0;
}

day1d

#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, q, a, b, c, f[200005], g[200005];
void jb{
    int a, b, c, i;
} d[2000005], s[200005];
bool cmp1 (JB a, JB b){
    return a.c < b.c;
}
bool cmp2 (JB a, JB b){
    return a.i < b.i;
}
int find(int x){
    if(x == f[x]) return x;
    return f[x] = find(f[x]);
}
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=m; i++) scanf("%d%d%d", &d[i].a, &d[i].b, &d[i].c);
    scanf("%d", &q);
    sort(d+1, d+m+1, cmp1);
    for(i=1; i<=q; i++){
        scanf("%d%d", &s[i].a, &s[i].c);
        s[i].i = i;
    }
    sort(s+1, s+q+1, cmp1);
    for(i=1; i<=n; i++) f[i] = i, g[i] = 1;
    for(i=j=1; i<=m; i++){
        a = d[i].a, b = d[i].b, c = d[i].c;
        while(j <= q&&c > s[j].c) {
            s[j].b = g[find(s[j].a)], j++;
        }
    }
    return 0;
}

...

#include <bits/stdc++.h>
#include <time.h>
using namespace std;
int i, j, k, kk, a, b, c, z, n, m, ans;
void jia(int i, int x){
    while (i <= n){
        c[i] += x;
        i += -i&i;
    }
}
int he(int i){
    int s = 0;
    while(i){
        s += c[i];
        i -= -i&i;
    }
    return s;
}
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%d", &a[i]);
        jia(i, a[i]);
    }
    for(i=1; i<=m; i++){
        scanf("%d%d%d", &k, &x, &y);
        if(k == 1){
            jia(x, y-a[x]);
            a[x] = y;
        }
        else{
            printf("%d\n", he(y)-he(x-1));
        }
    }
    return 0;
}